telnetlib是Python中的一个内置模块,用于通过Telnet协议进行远程登录和交互操作。它提供了一组方法,可以连接到远程主机、发送命令、接收响应、处理特殊字符等。
下面是telnetlib模块的一些常用方法和属性的详解:
1. Telnet(host=None, port=0, timeout=None):Telnet类的构造函数,用于创建一个Telnet对象。参数host是远程主机的地址,port是远程主机的端口号,timeout是连接超时时间。
2. open(host, port=23, timeout=None):打开一个Telnet连接。参数host和port与Telnet构造函数中的相同。
3. read_until(expected, timeout=None):读取输入直到遇到预期的字符串。参数expected是预期的字符串,timeout是读取超时时间。
4. read_very_eager():读取输入缓冲区中的所有数据,不会阻塞。
5. write(data):向远程主机发送数据。参数data是要发送的数据。
6. close():关闭Telnet连接。
7. set_debuglevel(level):设置调试级别,用于输出调试信息。
8. set_option_negotiation_callback(callback):设置选项协商回调函数。
9. expect(list, timeout=None):等待预期的字符串出现,返回匹配的字符串。参数list是一个字符串列表,每个字符串表示一个预期的字符串,timeout是等待超时时间。
10. expect_regexp(list, timeout=None):等待预期的正则表达式出现,返回匹配的字符串。参数list是一个正则表达式列表,每个正则表达式表示一个预期的字符串,timeout是等待超时时间。
11. set_echo(option):设置是否回显输入。
12. set_timeout(timeout):设置读取超时时间。
13. set_option_negotiation_callback(callback):设置选项协商回调函数。
14. set_option_negotiation_callback(callback):设置选项协商回调函数。
以上是telnetlib模块的一些常用方法和属性的详解,通过使用这些方法和属性,可以实现Telnet连接和交互操作。
import telnetlib
# 可以引入 time 模块,执行后调用 sleep() 函数等待片刻
import time
# 定义变量存取网元IP、用户名、密码
host = "192.168.11.11"
user = "python"
password = "123"
print("已成功登陆",host)
# 连接登录网元
tn = telnetlib.Telnet(host)
#这里根据不同设备厂家,等待的关键字会有不同
tn.read_until(b"Username:",timeout=1) # timeout=1 表示等待的时间,如果1秒内没等到就继续执行,默认是一直等。
tn.write(user.encode('ascii') + b"\n")
tn.read_until(b"Password:",timeout=1)
tn.write(password.encode('ascii') + b"\n")
# 取消分段显示
tn.write(b"screen-length 0 temporary\n")
# 进入系统视图,配置 Loopback0 口
tn.write(b"sys\n")
tn.write(b"interface LoopBack 0\n")
tn.write(b"ip address 11.11.11.11 255.255.255.255\n")
# 返回用户视图,保存配置
tn.write(b"return\n")
tn.write(b"save\n")
tn.write(b"Y\n")
# 等待
time.sleep(3)
# 1、打印截屏,此时用 read_very_eager() 能成功,此时不能执行 quit 退出。
# tn.write(b"quit\n") 根据 Python 的文档,quit 后断开 telnet 连接
# 则不能用 read_very_eager 而应该用 read_all,
# 但试了无论quit 不 quit ,都只能用 read_very_eager
tn.write(b"quit\n")
output = tn.read_very_eager().decode('ascii')
print(output)
'''
# 2、打印截屏,此时用 read_all() 不能成功,原因暂时还没完全定位到。
tn.write(b"quit\n")
output = tn.read_all().decode('ascii')
print(output)
'''
# 退出登录
tn.close()
读取配置host、IP、用户名、密码配置文件,创建一个迭代器,放入集合中,给for循环循环读取