如何在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获取本机mac地址和ip地址的方法
Apr 29 Python
深入理解Python中的super()方法
Nov 20 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
python实现自动登录
Sep 17 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
python基础之函数的定义和调用
Oct 24 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
php设计模式 Factory(工厂模式)
2011/06/26 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
Python实现从url中提取域名的几种方法
2014/09/26 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
openCV提取图像中的矩形区域
2020/07/21 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
金智子午JAVA面试题
2015/09/04 面试题
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
人事专员岗位职责说明书
2014/07/30 职场文书
出售房屋委托书范本
2014/09/24 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
辅导员学期工作总结
2015/08/14 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
Python访问Redis的详细操作
2021/06/26 Python
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android