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))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“如何在Python3中使用telnetlib模块连接网络设备”评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
2025年10月28日
2025年10月28日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]