如何在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去掉字符串中空格的方法
Mar 11 Python
深入浅析python中的多进程、多线程、协程
Jun 22 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
使用Python的turtle模块画图的方法
Nov 15 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
django中的图片验证码功能
Sep 18 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
python ansible自动化运维工具执行流程
Jun 24 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 iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
PHP session会话的安全性分析
2011/09/08 PHP
php权重计算方法代码分享
2014/01/09 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
20行python代码实现人脸识别
2019/05/05 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
J2EE模式面试题
2016/10/11 面试题
《翻越远方的大山》教学反思
2014/04/13 职场文书
本科生自荐信
2014/06/18 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
优秀党支部申报材料
2014/12/24 职场文书
英文自荐信范文
2015/03/25 职场文书
工作一年自我鉴定
2019/06/20 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
python实现Thrift服务端的方法
2021/04/20 Python