Python 中的 Telnetlib 模块
Vaibhav Vaibhav
2022年5月18日
Telnet 协议于 1969 年标准化为 IETF 或 Internet 工程任务组,是一种基于可靠的面向连接的传输的客户端-服务器协议。
它是在 LAN 或局域网和 Internet 上使用的应用协议。Telnet 协议通过虚拟终端(计算机终端或电子硬件设备)连接提供双向(双向)交互式的面向文本的通信设施。
在 Telnet 协议中,用户的数据通过 TCP 或传输控制协议分散在一个 8 位字节导向的数据连接上。Python 编程语言有一个实现 Telnet 协议的 telnetlib
模块。
在本文中,我们将了解 telnetlib
库。
Python 中的 telnetlib
库
telnetlib
模块有一个 Telnet
类,它包含 Telnet 协议的实际实现。
此类表示到 Telnet 服务器的设置连接。Telnet
类构造函数接受两个参数:host
和 port
。默认情况下,host
是 None
,port
是 0
。
以下是 Telnet
类的签名。
class telnetlib.Telnet(host=None, port=0)
Telnet
类具有以下方法。
read_until(expected, timeout = None)
- 读取直到找到给定的字节字符串expected
或直到timeout
秒数过去。read_all()
- 以字节形式读取所有数据,直到找到 EOF 或 End of File。它也会阻塞,直到连接关闭。read_some()
- 读取至少1
个字节的数据,直到遇到 EOF。read_very_eager()
- 在不阻塞输入输出或 I/O 操作的情况下,读取所有可能的内容。read_eager()
- 读取所有现成的数据。read_lazy()
- 处理并返回队列中已经存在的数据。read_very_lazy()
- 返回队列中可用的任何数据。read_sb_data()
- 返回在 SB/SE 对或子选项开始/子选项结束之间收集的数据。open(host, post = 0)
- 使用默认 Telnet 协议端口23
连接到指定主机。这里,0
指向端口23
。msg(msg, *args)
- 当调试级别大于0
时打印调试消息。所有额外的参数都使用标准字符串格式化运算符或%
替换消息。set_debuglevel(debuglevel)
- 设置调试级别。close()
- 关闭与 Telnet 服务器的连接。get_socket()
- 返回内部使用的套接字对象。fileno()
- 返回内部使用的套接字对象的文件描述符。write(buffer)
- 将字节字符串写入连接的套接字。interact()
- 这是一个模拟或匹配一个非常愚蠢的 Telnet 客户端的交互式函数。mt_interact()
- 一个多线程交互函数。expect(list, timeout = None)
- 读取数据,直到正则表达式列表中的一个正则表达式匹配。set_option_negotiation_callback(callback)
- 每次在输入数据流上读取 telnet 选项时,都会使用以下参数调用此回调函数:callback(telnet socket, command (DO/DONT/WILL/WONT), option)。telnetlib
模块之后不会执行其他操作。
例子
下面是一个简单的示例,它试图描述 telnetlib
模块的用法。请参考以下 Python 代码。
import getpass
import telnetlib
host = "127.0.0.1"
user = input("Username: ")
password = getpass.getpass()
tn = telnetlib.Telnet(host)
tn.read_until(b"Login: ")
tn.write(user.encode("ascii") + b"\n")
if password:
tn.read_until(b"Password: ")
tn.write(password.encode("ascii") + b"\n")
tn.write(b"ls\n")
tn.write(b"exit\n")
print(tn.read_all().decode("ascii"))
上面的 Python 脚本将连接到计算机系统中的环回地址 localhost
或 127.0.0.1
。
接下来,它将接受两个输入:用户名和密码。getpass
模块允许我们在不安全地暴露密码的情况下输入密码。然后,脚本将使用 Telnet
类连接到主机。
它将在 Login:
和 Password:
字符串旁边写入用户名和密码输入。最后,它将运行 ls
和 exit
命令并使用 read_all()
方法读取所有字节数据。
作者: Vaibhav Vaibhav