Python 中的 Telnetlib 模块
    
    Vaibhav Vaibhav
    2022年5月18日
    
    Python
    Python Module
    
 
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() 方法读取所有字节数据。
        Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
    
作者: Vaibhav Vaibhav
    
