如何在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 相关文章推荐
通过C++学习Python
Jan 20 Python
用Python计算三角函数之acos()方法的使用
May 15 Python
Python中的自省(反射)详解
Jun 02 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
使用python实现对元素的长截图功能
Nov 14 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
详解如何用Python实现感知器算法
Jun 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
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
PHP 批量更新网页内容实现代码
2010/01/05 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
Javascript的闭包详解
2014/12/26 Javascript
使用console进行性能测试
2015/04/27 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
详解Vue底部导航栏组件
2019/05/02 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
Python strip lstrip rstrip使用方法
2008/09/06 Python
Python实现控制台进度条功能
2016/01/04 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
党在我心中演讲稿
2014/09/02 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
中秋联欢会主持词
2015/07/04 职场文书
七一表彰大会简报
2015/07/20 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
Python中异常处理用法
2021/11/27 Python