如何在Python3中使用telnetlib模块连接网络设备


Posted in Python onSeptember 21, 2020

Python中专门提供了telnetlib库,用来完成基于telnet协议的通信功能。

python3下使用telnetlib模块连接网络设备经常会遇到字节与字符不匹配的问题

问题提示如下:

import telnetlib
Host = "10.10.10.10"
# 连接Telnet服务器
tn = telnetlib.Telnet(Host, port=23, timeout=10)
tn.set_debuglevel(0)

# 输入登录用户名
tn.read_until(b'login: ')
tn.write(b"admin" + b'\n')

# 输入登录密码
tn.read_until(b'Password: ')
tn.write(b"Admin@1234" + b'\n')

tn.read_until(b'#')
tn.write(b"cd /home/sd" + b'\n')

tn.read_until(b'#')
tn.write(b"ls -al" + b'\n')

r = tn.read_until(b'#').decode('ASCII')
r1 = r.split(r"\r\n")
for i in r1:
  print(i)

tn.close()

以下是设备实例:

>>> tn=telnetlib.Telnet("10.10.0.6",timeout=2)
>>> tn.read_until(b'login: ',timeout=2)
b"\r\n******************************************************************
****\r\n* Copyright (c) 2004-2018 New H3C Technologies Co., Ltd. All rig
rved.*\r\n* Without the owner's prior written consent,
    *\r\n* no decompiling or reverse-engineering shall be allowed.
     *\r\n**********************************************************
************\r\n\r\nlogin: "
>>> tn.write(b'admin'+b'\n')
>>> tn.read_until(b'Password: ',timeout=2)
b'jgtl\r\r\nPassword: '
>>> tn.write(b'Admin@123'+b'\n')
>>> tn.read_until(b'>')
b'\r\n<bangong-01>'
>>> tn.write(b'ping 10.10.0.7')
>>> tn.read_until(b'>')

以上是命令行执行的过程。写成脚本需要考虑两个问题,一个是变量的替换如何编码解封,一个是输出结果加解码

#-*- coding:utf-8 -*-
import telnetlib
import re
import csv
import sys
import time
from datetime import datetime

host_dict={
  "ip":"10.10.0.6",
  "user":"admin",
  "pwd":"Admin@123"
}

def get_loss(addrlist):
  host=host_dict["ip"]
  user=host_dict["user"]
  pwd=host_dict["pwd"]
  print (host)
  resultlist = []
  #try:
  tn = telnetlib.Telnet(host, timeout=2)
  print ("AA")
  if len(host_dict["pwd"]) and len(host_dict["user"]):
    print ("BB")
    tn.read_until(b"login: ", timeout=3)
    #tn.write(b"admin"+b"\n")
    tn.write(user.encode()+b"\n")
    tn.read_until(b"Password: ", timeout=3)
    #tn.write(b"Admin@123"+b"\n")
    tn.write(pwd.encode()+ b"\n")
    # p_error = re.compile("found at")

  if tn.read_until(b">", timeout=4).find(b">") != -1:
    print("Connect to {host} ...... ".format(host=host))
    tn.write(b"ping 127.0.0.1\n")
    print (tn.read_until(b'01>'))
  else:
    print("%s Wrong username or password!!!" % host)
    return ""
  #tn.read_until(b">")

  if len(addrlist) != 0:
    for i in range(len(addrlist)-1):
      tep = {}
      command = "ping " + addrlist[i]
      print("command:", command)
      tn.write(command.encode() + b"\n")
      result = str(tn.read_until(b"01>"))
      print(result)
      re_loss = re.compile("\d+\.\d+%")
      loss = re_loss.findall(result)
      tep[host] = loss[0]
      resultlist.append(tep)
      #if p_error.search(result.decode()):
      #  print("There is a error in this command: {0}".format(c.decode()))
  tn.close()
  #except Exception as e:
    #if e:
    #  print ("Connect to {host} Failed!!!".format(host=host),e)
    #return ""
  return resultlist

if __name__=="__main__":
  addrlist=['10.10.0.2','10.10.0.5']
  print ("get_loss",get_loss(addrlist))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现根据月份和日期得到星座的方法
Mar 27 Python
Linux下用Python脚本监控目录变化代码分享
May 21 Python
Python类的动态修改的实例方法
Mar 24 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
Python脚本完成post接口测试的实例
Dec 17 Python
详解Python 切片语法
Jun 10 Python
python标记语句块使用方法总结
Aug 05 Python
Python列表list常用内建函数实例小结
Oct 22 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
Python连接mysql方法及常用参数
Sep 01 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 #Python
python生成xml时规定dtd实例方法
Sep 21 #Python
Python中的特殊方法以及应用详解
Sep 20 #Python
matplotlib 三维图表绘制方法简介
Sep 20 #Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 #Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 #Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 #Python
You might like
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
php 高效率写法 推荐
2010/02/21 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
JQuery遍历DOM节点的方法
2015/06/11 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
python多线程并发实例及其优化
2019/06/27 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
Python字典对象实现原理详解
2019/07/01 Python
python 初始化一个定长的数组实例
2019/12/02 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
四年的个人工作自我评价
2013/12/10 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
爱心募捐通知范文
2015/04/27 职场文书