Python 中的 Telnetlib 模块

Vaibhav Vaibhav 2022年5月18日
Python 中的 Telnetlib 模块

Telnet 协议于 1969 年标准化为 IETF 或 Internet 工程任务组,是一种基于可靠的面向连接的传输的客户端-服务器协议。

它是在 LAN 或局域网和 Internet 上使用的应用协议。Telnet 协议通过虚拟终端(计算机终端或电子硬件设备)连接提供双向(双向)交互式的面向文本的通信设施。

在 Telnet 协议中,用户的数据通过 TCP 或传输控制协议分散在一个 8 位字节导向的数据连接上。Python 编程语言有一个实现 Telnet 协议的 telnetlib 模块。

在本文中,我们将了解 telnetlib 库。

Python 中的 telnetlib

telnetlib 模块有一个 Telnet 类,它包含 Telnet 协议的实际实现。

此类表示到 Telnet 服务器的设置连接。Telnet 类构造函数接受两个参数:hostport。默认情况下,hostNoneport0

以下是 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 脚本将连接到计算机系统中的环回地址 localhost127.0.0.1

接下来,它将接受两个输入:用户名和密码。getpass 模块允许我们在不安全地暴露密码的情况下输入密码。然后,脚本将使用 Telnet 类连接到主机。

它将在 Login:Password: 字符串旁边写入用户名和密码输入。最后,它将运行 lsexit 命令并使用 read_all() 方法读取所有字节数据。

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

相关文章 - Python Module