如何在Python3中使用telnetlib模块连接网络设备
Python中专门提供了telnetlib库,用来完成基于telnet协议的通信功能。
python3下使用telnetlib模块连接网络设备经常会遇到字节与字符不匹配的问题
问题提示如下:
importtelnetlib
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")
foriinr1:
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-2018NewH3CTechnologiesCo.,Ltd.Allrig
rved.*\r\n*Withouttheowner'spriorwrittenconsent,
*\r\n*nodecompilingorreverse-engineeringshallbeallowed.
*\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'
>>>tn.write(b'ping10.10.0.7')
>>>tn.read_until(b'>')
以上是命令行执行的过程。写成脚本需要考虑两个问题,一个是变量的替换如何编码解封,一个是输出结果加解码
#-*-coding:utf-8-*-
importtelnetlib
importre
importcsv
importsys
importtime
fromdatetimeimportdatetime
host_dict={
"ip":"10.10.0.6",
"user":"admin",
"pwd":"Admin@123"
}
defget_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")
iflen(host_dict["pwd"])andlen(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("foundat")
iftn.read_until(b">",timeout=4).find(b">")!=-1:
print("Connectto{host}......".format(host=host))
tn.write(b"ping127.0.0.1\n")
print(tn.read_until(b'01>'))
else:
print("%sWrongusernameorpassword!!!"%host)
return""
#tn.read_until(b">")
iflen(addrlist)!=0:
foriinrange(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)
#ifp_error.search(result.decode()):
#print("Thereisaerrorinthiscommand:{0}".format(c.decode()))
tn.close()
#exceptExceptionase:
#ife:
#print("Connectto{host}Failed!!!".format(host=host),e)
#return""
returnresultlist
if__name__=="__main__":
addrlist=['10.10.0.2','10.10.0.5']
print("get_loss",get_loss(addrlist))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。