如何使用 Asyncio 在 Python 中创建 Telnet 客户端

2024 年 8 月 29 日 | 4 分钟阅读

引言

在本教程中,我们将讨论如何使用 Python 的 Asyncio 创建 telnet 客户端。Telnet 是一种客户端/服务器软件协议,它使用 TCP/IP 进行连接。Telnet 协议允许用户登录并使用远程计算机,就像它们直接连接到本地网络一样。使用此系统进行连接的客户端是客户机,而连接的远程计算机是服务器。在 Telnet 客户端的终端中输入的指令将在服务器(远程计算机)上执行,并且命令的输出将定向到客户端计算机的显示器。Telnet 不安全,因为它使用纯文本通信。使用加密来加密传输数据的安全 Telnet 实现是 SSH(安全 Shell)。Telnet 协议是 I/O 绑定的,并且 I/O 非常慢。例如,由于服务器端的速度很慢,与服务器建立连接可能需要很长时间;这会导致大量 CPU 空闲时间,因为需要与服务器创建许多此类连接,asyncio 库非常适合此类项目。

Asyncio(异步输入/输出)是一个用于并发编程的 Python 库。异步是一种编程风格,在这种风格中,进程同时执行(而不是并发执行)。计算(单线程)中只有一个 CPU 核心,因此任务轮流执行和处理。项目 1 可能先开始,然后 CPU 在中间过程开始执行项目 2;CPU 可能会选择在任务之间切换以优化资源利用率并最大程度地减少空闲时间。

Telnet 是一种网络协议,它允许一台计算机上的客户端登录到同一网络中的另一台计算机。Telnet 命令与主机名一起使用,然后输入用户的凭据。成功登录后,远程用户可以像普通用户一样访问该设备上的程序和信息。当然,一些权限可以由设置和维护该设备的设备管理员控制。在 Python 中,Telnet 通过 telnetlib 实现,该库具有 Telnet 类以及建立连接所需的方法。在下面的示例中,我们还使用 getpass 模块来处理登录过程中的密码提示。此外,我们假设连接到 Unix 主机——Telnetlib 中的方法之一。程序中使用的 Telnet 类在下面进行了解释。

1. read_until -

读取直到遇到给定的标准字符串或直到超时。

2. write -

将字符串写入套接字,加倍 IAC 字符。如果连接是安全的,它可能会阻塞。如果连接关闭,可能会引发 socket.error。

3. read_all() -

读取直到 EOF 的所有数据;阻塞直到连接关闭。

创建 Telnet 客户端的步骤是什么?

创建 telnet 客户端的步骤如下:

定义异步 Telnet 客户端函数

使用 asyncio.open_connection() 协程和参数 host、port 打开到服务器的连接,此函数返回 reader 和 writer,它们是 StreamReader 和 StreamWriter 类的实例。这些项用于从服务器读取和写入服务器。语句 await reader.readline() 返回从服务器接收到的一行,并在等待服务器响应时产生控制,从而生成一个受控的流程,告知事件循环,当协程等待响应时,继续并使用处理能力进行其他计算。打印从服务器收到的响应。一旦成功建立连接,就可以使用 StreamWriter 类的 writer 项发送文本命令,服务器可以本地执行这些命令,并且可以通过 StreamReader 类的对象查看结果,关闭连接。

结论

通过本教程,我们正在讨论如何使用 asyncio 在 Python 中创建 telnet 客户端。

Telnet 是一种客户端/服务器软件协议,它使用 TCP/IP 进行连接。Telnet 协议允许用户登录并使用远程计算机,就像它们直接连接到本地网络一样。使用此系统进行连接的客户端是客户机,而连接的远程计算机是服务器。