南昌好的做网站的公司,wordpress 艺术主题,seo网站查询,怎么建设淘宝客网站1、Telnetlib模块#xff1a;
支持telnet/ssh远程访问的模块很多#xff0c;常见的有telnetlib、ciscolib、paramiko、netmiko、pexpect,其中telnetlib和ciscolib对应telnet协议#xff0c;后面3个对应SSH协议。
①-通过ENSP环境搭建实验环境 ②-基础语法-telnetlib案例1
支持telnet/ssh远程访问的模块很多常见的有telnetlib、ciscolib、paramiko、netmiko、pexpect,其中telnetlib和ciscolib对应telnet协议后面3个对应SSH协议。
①-通过ENSP环境搭建实验环境 ②-基础语法-telnetlib案例1
注意python3中,telnetlib模块下所有的返回值都是字节流而默认输入的都是普通字符串str因此在python3中使用tlenetlib需要注意
①在字符串的前面需要加上一个b 转换成字节流
②在变量和tlentlib函数后面需要加上.encode(ascii)函数 进行解码
③在read_all()函数后面需要加上decode(ascii)函数 import telnetlib
import timehost 192.168.2.11
user 111
password 111
#执行telnet 并输入用户名和密码
tn telnetlib.Telnet(host,port23,timeout1) #tn实例化函数 telnet设备ip地址端口号超时时间也可以不写默认即可
tn.read_until(bUsername,timeout1) #read函数 读取设备返回的Username字符串
tn.write(user.encode(ascii) b\n) #将用户名转为ascii编码方式将字符串转换为bytes \n回车
tn.read_until(bPassword:,timeout1)
tn.write(password.encode(ascii) b\n)
print(已登录进设备 host)tn.write(bsys\n) #写入命令
tn.write(bint loopback 1\n)
tn.write(bip address 1.1.1.1 32\n)
tn.write(bquit\n)
tn.write(bquit\n)
tn.write(bsave\n)
tn.write(by\n)time.sleep(2) #时间模块暂停2s 等待设备响应
output (tn.read_very_eager().decode(ascii)) #输出结果区域
print(output)
tn.close()
③-登录多台设备for 循环-telnetlib案例2
通过列表添加设备ip然后for循环调用执行
import telnetlib
import timehosts [192.168.2.11,192.168.2.12,192.168.2.13,192.168.2.14,192.168.2.15,192.168.2.16]
user 111
password 111for ip in hosts: #循环执行hosts列表tn telnetlib.Telnet(ip) #tn实例化函数 telnet设备ip地址端口号超时时间也可以不写默认即可tn.read_until(bUsername:) #read函数 读取设备返回的Username字符串tn.write(user.encode(ascii) b\n) #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(bPassword:,timeout1)tn.write(password.encode(ascii) b\n)print(已登录进设备 ip)tn.write(bsys\n) #写入命令tn.write(bint loopback 1\n)tn.write(bip address 1.1.1.1 32\n)tn.write(bquit\n)tn.write(bquit\n)tn.write(bsave\n)tn.write(by\n)time.sleep(2) #时间模块暂停2s 等待设备响应output (tn.read_very_eager().decode(ascii)) #输出结果区域 转为ascii编码方式将字符串转换为bytesprint(output)tn.close() ④-循环执行多条命令-telnetlib案例3
定义主机ip列表
定义命令字符串列表
然后for循环执行以上列表
import telnetlib
import timehosts [192.168.2.11,192.168.2.12,192.168.2.13,192.168.2.14,192.168.2.15,192.168.2.16] #s表示列表
user 111
password 111
commands [sys,int loopback 1,ip address 1.1.1.1 32,quit,quit,save,y] #相当于把命令刷到文档里,s表示列表for ip in hosts:tn telnetlib.Telnet(ip) #tn实例化函数 telnet设备ip地址端口号超时时间也可以不写默认即可tn.read_until(bUsername:) #read函数 读取设备返回的Username字符串tn.write(user.encode(ascii) b\n) #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(bPassword:,timeout1)tn.write(password.encode(ascii) b\n)print(已登录进设备 ip)for command in commands:tn.write(command.encode(ascii)b\n) #循环调用commands内的命令time.sleep(2) #时间模块暂停2s 等待设备响应output (tn.read_very_eager().decode(ascii)) #输出结果区域print(output)tn.close() ⑤-异常处理-telnetlib案例
增加异常处理防止某台交换机登录失败导致程序中断
import telnetlib
import timehosts [192.168.2.11,192.168.2.12,192.168.2.13,192.168.2.14,192.168.2.15,192.168.2.16] #s表示列表
user 111
password 111
commands [sys,int loopback 1,ip address 1.1.1.1 32,quit,quit,save,y] #相当于把命令刷到文档里,s表示列表
Error [] #创建Error队列
for ip in hosts: #循环登录iptry:tn telnetlib.Telnet(ip) #tn实例化函数 telnet设备ip地址tn.read_until(bUsername:,timeout1) #read函数 读取设备返回的Username字符串tn.write(user.encode(ascii) b\n) #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(bPassword:,timeout1)tn.write(password.encode(ascii) b\n)print(已登录进设备 ip)for command in commands:tn.write(command.encode(ascii)b\n) #循环调用commands内的命令time.sleep(2) #时间模块暂停2s 等待设备响应output (tn.read_very_eager().decode(ascii)) #输出结果区域print(output)tn.close()except: #只要登录错误都按如下打印
# except TimeoutError: # 只会处理timeoutError的错误print(登录失败登录超时的设备IPip )Error.append(ip) #append添加附加将失败的ip添加到Error的列表
print(Error) #打印失败的设备ip
连接异常和密码错误异常 处理判断 ⑥-通过文本读取IP和命令-telnetlib案例
将ip地址或者命令放在txt文本文件中通过脚本读取文本文件 import telnetlib
import timehosts open(hosts.txt,r) #使用open函数 打开文本并read 读取
user 111
password 111
commands open(commands.txt,r)
ConnectionError [] #连接失败的列表for ip in hosts.readlines(): #readline 逐行读取文本文件try:ip ip.strip() #strip函数可以去除文本中的回车和空格tn telnetlib.Telnet(ip) #tn实例化函数 telnet设备ip地址tn.read_until(bUsername:) #read函数 读取设备返回的Username字符串tn.write(user.encode(ascii) b\n) #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(bPassword:)tn.write(password.encode(ascii) b\n)print(已登录进设备 ip)#print(f已登录进设备{ip})commands.seek(0) #光标每次读取完都会在最后需要用seek函数将光标置于最前面for command in commands.readlines():tn.write(command.encode(ascii)b\n) #循环调用commands内的命令time.sleep(2)output (tn.read_very_eager()).decode(ascii) #输出结果区域print(output)tn.close()except: #只要登录错误都按如下打印print(##########登录失败登录超时的设备IPip########## )ConnectionError.append(ip) #append添加附加将失败的ip添加到ConnectionError的列表
print(ConnectionError) ⑦-封装成函数解决问题-telnetlib案例
将telnetlib封装成函数方便小规模灵活应用便于调用同时增加input输入用户名和密码。允许部分交换机用户名和密码不同。
import telnetlib
import timecommands open(commands.txt,r)
ConnectionError []
AuthenFaill []def Telnet (host,usernameinput(请输入用户名),passwordinput(请输入密码),port23): #封装定义函数,定义host username passwordtry:tn telnetlib.Telnet(host) #tn实例化函数 telnet设备ip地址tn.read_until(bUsername:) #read函数 读取设备返回的Username字符串tn.write(username.encode(ascii) b\n) #将用户名转为ascii编码方式将字符串转换为bytes \n回车tn.read_until(bPassword:)tn.write(password.encode(ascii) b\n)index,obj,ouptn.expect([bInfo,bError],timeout1)if index 0:print(已经成功登录设备host)elif index 1:print(设备用户或密码错误host)AuthenFaill.append(host)commands.seek(0) #光标每次读取完都会在最后需要用seek函数将光标置于最前面for command in commands.readlines():tn.write(command.encode(ascii)b\n) #循环调用commands内的命令time.sleep(2)output (tn.read_very_eager()).decode(ascii) #输出结果区域print(output)tn.close()except :print(连接异常失败IPhost)ConnectionError.append(host) #append添加附加将失败的ip添加到ConnectionError的列表Telnet(192.168.2.11)
Telnet(192.168.2.12)
Telnet(192.168.2.13,usernameroot,passwordroo111) #如果此台主机密码不同于其他可以直接赋予正确的密码
Telnet(192.168.2.14)
Telnet(192.168.2.15)
Telnet(192.168.2.16)print(-*100)
print(认证失败的设备如下)
print(AuthenFaill)
print(-*100)
print(连接异常的设备如下)
print(ConnectionError) ⑧-ping案例
可以使用os.system或者subprocess模块实现ping检测 import os
ip 192.168.1.1
response os.system(ping -n 1 ip) #发1包if response 0:print(ip,is up!)
else:print(ip,is down!)
或者 import os
host [192.168.1.1]
for ip in host:try:ping_result os.system(fping -n 1 {ip})if ping_result 0:print(f{ip} 连通性正常)else:print(f{ip} 连通性异常)except Exception as e:print(检查 {ip} 连通性时出现异常{e}) 或者
import subprocess #subprocess模块执行ping命令只返回结果不返回打印
host [192.168.1.1]
for ip in host:try:command [ping, -n, str(1), ip]result subprocess.run(command, stdoutsubprocess.PIPE, stderrsubprocess.PIPE, textTrue)#朱提部分subprocess.run执行命令捕获输出但不打印if result.returncode 0: #检查是否执行成功print(ok)else:print(pok)#print(pok,result.stderr) 如果需要可以打印错误信息except Exception as e:print(检查 {ip} 连通性时出现异常{e})