如何在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+Wordpress制作小说站
Apr 14 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
Python Nose框架编写测试用例方法
Oct 26 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
Python使用paramiko操作linux的方法讲解
Feb 25 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
django之导入并执行自定义的函数模块图解
Apr 01 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP的面试题集,附我的答案和分析(一)
2006/11/19 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
loading动画特效小结
2017/01/22 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
python简单文本处理的方法
2015/07/10 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
python lambda的使用详解
2021/02/26 Python
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
电视节目策划方案
2014/05/16 职场文书
开工典礼策划方案
2014/05/23 职场文书
文明礼仪标语
2014/06/13 职场文书
树转促学习心得体会
2014/09/10 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫