如何在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输出当前目录下index.html文件路径的方法
Apr 28 Python
python显示生日是星期几的方法
May 27 Python
Python实现新浪博客备份的方法
Apr 27 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
python将回车作为输入内容的实例
Jun 23 Python
Python 中的lambda函数介绍
Oct 10 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
python保存字典和读取字典的实例代码
Jul 07 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
Django app配置多个数据库代码实例
Dec 17 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
基于Python的OCR实现示例
Apr 03 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
短波问题解答
2021/02/28 无线电
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
php自定义错误处理用法实例
2015/03/20 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
javascript fullscreen全屏实现代码
2009/04/09 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
python使用scrapy解析js示例
2014/01/23 Python
python抓取网页内容示例分享
2014/02/24 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
Europcar比利时:租车
2019/08/26 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
世界上最大的艺术社区:SAA
2020/12/30 全球购物
毕业生护理专业个人求职信范文
2014/01/04 职场文书
秘书英文求职信
2014/04/16 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
大客户经理岗位职责
2015/04/09 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle