如何在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))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。