telnetlib — TelnetClient 端

源代码: Lib/telnetlib.py


telnetlib模块提供实现 Telnet 协议的Telnet类。有关该协议的详细信息,请参见 RFC 854。另外,它为协议字符(请参见下文)和 telnet 选项提供符号常量。 telnet 选项的符号名称遵循arpa/telnet.h中的定义,其中前导TELOPT_已删除。有关传统上arpa/telnet.h中未包含的选项的符号名称,请参见模块源本身。

telnet 命令的符号常量为:IAC,DONT,DO,WONT,WILL,SE(子协商结束),NOP(无操作),DM(数据标记),BRK(break),IP(break过程),AO(中止输出),AYT(您在那里),EC(擦除字符),EL(擦除行),GA(前进),SB(子协商开始)。

    • class * telnetlib. Telnet(* host = None port = 0 * [,* timeout *])
    • Telnet表示与 Telnet 服务器的连接。默认情况下,实例最初未连接;必须使用open()方法构建连接。或者,也可以将主机名和可选端口号传递给构造函数,在这种情况下,将在构造函数返回之前构建与服务器的连接。可选的* timeout *参数以秒为单位指定用于阻止诸如连接try之类的操作的超时(如果未指定,将使用全局默认超时设置)。

不要重新打开已经连接的实例。

此类具有许多read_*()方法。请注意,其中一些在读取连接结束时会引发EOFError,因为它们可能由于其他原因而返回空字符串。请参阅下面的个别说明。

Telnet对象是上下文 Management 器,可以在with语句中使用。 with块结束时,将调用close()方法:

>>> from telnetlib import Telnet
>>> with Telnet('localhost', 23) as tn:
...     tn.interact()
...

在版本 3.6 中更改:添加了上下文 Management 器支持

See also

  • RFC 854-Telnet 协议规范

  • Telnet 协议的定义。

Telnet Objects

Telnet个实例具有以下方法:

  • Telnet. read_until(* expected timeout = None *)
    • 读取直到遇到给定的字节字符串* expected 或经过 timeout *秒。

如果找不到匹配项,则返回任何可用的内容,可能为空字节。如果连接已关闭并且没有可用的数据,请提高EOFError

  • Telnet. read_all ( )

    • 读取所有数据,直到 EOF 以字节为单位;阻塞直到连接关闭。
  • Telnet. read_some ( )

    • 读取至少一个字节的烹饪数据,除非命中 EOF。如果命中 EOF,则返回b''。如果没有立即可用的数据,则阻止。
  • Telnet. read_very_eager ( )

    • 读取所有可能不阻塞 I/O 的内容(渴望)。

如果连接已关闭并且没有可用的数据,则提高EOFError。如果没有可用的煮熟数据,则返回b''。除非处于 IAC 序列之中,否则不要阻塞。

  • Telnet. read_eager ( )
    • 读取随时可用的数据。

如果连接已关闭并且没有可用的数据,则提高EOFError。如果没有可用的煮熟数据,则返回b''。除非处于 IAC 序列之中,否则不要阻塞。

  • Telnet. read_lazy ( )
    • 处理并返回队列中已经存在的数据(延迟)。

如果连接已关闭且无可用数据,请提高EOFError。如果没有可用的煮熟数据,则返回b''。除非处于 IAC 序列之中,否则不要阻塞。

  • Telnet. read_very_lazy ( )
    • 返回煮熟队列中的所有可用数据(非常懒惰)。

如果连接已关闭且无可用数据,请提高EOFError。如果没有可用的煮熟数据,则返回b''。此方法永远不会阻塞。

  • Telnet. read_sb_data ( )

    • 返回在 SB/SE 对之间收集的数据(子选项 begin/end)。当使用SE命令调用回调时,回调应该访问这些数据。此方法永远不会阻塞。
  • Telnet. open(* host port = 0 * [,* timeout *])

    • 连接到主机。可选的第二个参数是端口号,默认为标准 Telnet 端口(23)。可选的* timeout *参数以秒为单位指定用于阻止诸如连接try之类的操作的超时(如果未指定,将使用全局默认超时设置)。

不要try重新打开已连接的实例。

用参数selfhostport引发auditing event telnetlib.Telnet.open

  • Telnet. msg(* msg * args *)

    • 当调试级别为> 0 时,打印调试消息。如果存在其他参数,则使用标准的字符串格式运算符将它们替换为消息。
  • Telnet. set_debuglevel(* debuglevel *)

    • 设置调试级别。 * debuglevel *的值越高,您获得的调试输出就越多(在sys.stdout上)。
  • Telnet. close ( )

    • 关闭连接。
  • Telnet. get_socket ( )

    • 返回内部使用的套接字对象。
  • Telnet. fileno ( )

    • 返回内部使用的套接字对象的文件 Descriptors。
  • Telnet. write(* buffer *)

    • 将字节字符串写入套接字,使所有 IAC 字符加倍。如果连接被阻止,则可能会阻止。如果连接已关闭,则可能引发OSError

用参数selfbuffer引发auditing event telnetlib.Telnet.write

在版本 3.3 中更改:此方法曾经引发socket.error,现在是OSError的别名。

  • Telnet. interact ( )

    • 交互Function,模拟非常笨拙的 TelnetClient 端。
  • Telnet. mt_interact ( )

  • Telnet. expect(* list timeout = None *)

    • 读取直到正则表达式列表中的一个匹配。

第一个参数是已编译(regex objects)或未编译(字节字符串)的正则表达式列表。可选的第二个参数是超时,以秒为单位;默认为无限期阻止。

返回三项的 Tuples:第一个匹配的正则表达式列表中的索引;匹配对象返回;字节读取直到匹配为止。

如果找到文件末尾且未读取任何字节,请引发EOFError。否则,如果没有匹配项,则返回(-1, None, data),其中* data *是到目前为止接收到的字节(如果发生超时,则可以为空字节)。

如果正则表达式以贪婪的匹配(例如.*)结尾,或者如果多个表达式可以匹配同一 Importing,则结果是不确定的,并且可能取决于 I/O 时序。

  • Telnet. set_option_negotiation_callback(回调)
    • 每次在 Importing 流上读取 telnet 选项时,都会使用以下参数调用此* callback *(如果已设置):callback(telnet 套接字,命令(DO/DONT/WILL/WONT),option)。 telnetlib 之后没有其他动作。

Telnet Example

一个简单的示例说明典型用法:

import getpass
import telnetlib

HOST = "localhost"
user = input("Enter your remote account: ")
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'))