Python telnet模块说明
本文转自三番鱼 并作补充
程序要点说明
python实现telnet客户端的六个关键问题及其答案是:
使用什么库实现telnet客户端—-telnetlib
1.怎么连接主机—-两种方法,一种是在实例化时传入ip地址连接主机(tn = telnetlib.Telnet(host_ip,port=23)),第二种是,先不传参数进行实例化再用open方法连接主机(我这里使用的方法)
2.怎么输入用户名密码—-我们使用read_untilb函数监听,出现标志后使用write方法向服务端传输用户名密码
3.怎么执行命令—-仍然是使用write方法向服务端传送命令,不管向服务端传送什么数据都用write;不过要注意需要编码成bytes类型
注:该Telnet.write()函数采用字节字符串。这可以通过仅编码字符串(您尝试编码函数的返回值)来提供,例如:
1 | session.write("administrator\n".encode('ascii')) |
或者通过为字符串添加前缀b如下:
1 | import telnetlib |
4.怎么获取命令执行结果—-使用read_very_eager()方法,该方法获取的内容是上次获取之后本次获取之前的所有输入输出;由于获取到的是bytes类型要decode解码一下
5.怎么退出telnet—退出telnet使用write方法向服务器提交exit命令即可
程序源码清单
1 | import logging |
python 库 telnetlib: Telnet客户端:
telnetlib模块提供的Telnet类实现了Telnet协议。它为协议字符和telnet选项提供符号常量,符号常量来源于arpa/telnet.h去掉了前缀TELOPT_1.Telnet.read_all(): 读取所有数据直到EOF,阻塞直到连接关闭
2.Telnet.read_some(): 读取至少一个字节的数据,除非EOF。如果没有数据则阻塞。
3.Telnet.read_until(expected[, timeout]):常用于登录,与write连用;读取直到遇到了给定的字符串expected或超时秒数
4.Telnet.read_very_eager(): 非阻塞地读取。连接关闭或者没有数据时触发EOFError异常,返回b’’如果没有数据。 获取命令执行结果:获取的内容是上次获取之后本次获取之前的所有输入输出
5.Telnet.read_eager(): 读取已有数据(快)
6.Telnet.read_lazy(): 读取已有数据(懒)
7.Telnet.read_sb_data(): 返回的SB/SE pair(suboption begin/end)之间的数据,此方法永远不会阻塞
8.Telnet.open(host[,port[,timeout]]): 连接到主机,可选的第二个参数是默认为标准的Telnet端口(23)的端口号。可选的超时参数(以秒指定)阻塞操作(如连接尝试超时(如果不指定,默认使用全局超时设置))
9.Telnet.msg(msg[, *args]): 当调试级别为>0打印调试信息
10.Telnet.set_debuglevel(debuglevel):设置调试级别。debuglevel越高信息越多。
11.Telnet.close() 关闭连接
12.Telnet.get_socket():返回套接字供内部使用
13.Telnet.fileno(): 返回套接字对象内部使用的文件描述
14.Telnet.write(buffer): 常用于执行命令;写入字符串到套接字,加倍IAC的任何字符。连接关闭时可能触发OSError异常。
15.Telnet.interact(): 交由用户控制
16.Telnet.mt_interact(): 多线程版本的interact()
17.Telnet.expect(list[, timeout]): 读取直到匹配正则表达式项列表中的一个。list是一个正则表达式列表,包含编译(regx对象)或未编译(字节字符串)。timeout以秒为单位,默认值为无限期阻塞。返回元祖的三个项目:
- 1.index为匹配正则表达式的位置;
- 2.match对象
- 3.此时读了的字节
18.Telnet.set_option_negotiation_callback(callback):每次从输入流读取telnet选项时,调用callback,后续步骤不会执行。