如何在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实现用户管理系统
Jan 10 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
Pycharm更换python解释器的方法
Oct 29 Python
如何通过Python实现标签云算法
Jul 02 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
python zip()函数的使用示例
Sep 23 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
python re模块和正则表达式
Mar 24 Python
python爬虫之利用selenium模块自动登录CSDN
Apr 22 Python
python3 字符串str和bytes相互转换
Mar 23 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
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
推荐dojo学习笔记
2007/03/24 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
wxPython框架类和面板类的使用实例
2014/09/28 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
银行存款证明样本
2014/01/17 职场文书
单位介绍信范文
2014/01/18 职场文书
倡议书的写法
2014/08/30 职场文书
工程资料员岗位职责
2015/04/13 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电
mysql 子查询的使用
2022/04/28 MySQL