如何在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 strip lstrip rstrip使用方法
Sep 06 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
小米5s微信跳一跳小程序python源码
Jan 08 Python
python图书管理系统
Apr 05 Python
Python单元测试简单示例
Jul 03 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
Django组件之cookie与session的使用方法
Jan 10 Python
Python编程实现tail-n查看日志文件的方法
Jul 08 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 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开发者事半功倍的十大技巧小结
2010/04/20 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
向左滚动文字 js代码效果
2013/08/17 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
python下载文件记录黑名单的实现代码
2017/10/24 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Numpy掩码式数组详解
2018/04/17 Python
python实现多层感知器
2019/01/18 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
python实现梯度下降法
2020/03/24 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
如何利用Python写个坦克大战
2020/11/18 Python
Python之多进程与多线程的使用
2021/02/23 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
社会实践自我鉴定
2013/11/07 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
董事长助理岗位职责
2015/02/11 职场文书
鸡毛信观后感
2015/06/11 职场文书
python的html标准库
2022/04/29 Python