telnetlib ---telnet客户端

源代码: Lib/telnetlib.py


这个 telnetlib 模块提供 Telnet 实现telnet协议的类。见 RFC 854 有关协议的详细信息。此外,它还为协议字符(见下文)和telnet选项提供符号常量。telnet选项的符号名遵循中的定义。 arpa/telnet.h ,在前面 TELOPT_ 弃用。对于传统上不包括在 arpa/telnet.h ,请参见模块源代码本身。

telnet命令的符号常量为:iac、dont、do、wnt、will、se(子协商结束)、nop(无操作)、dm(数据标记)、brk(中断)、ip(中断过程)、ao(中止输出)、ayt(是否存在)、ec(擦除字符)、el(擦除行)、ga(继续)、sb(子协商开始)。

class telnetlib.Telnet(host=None, port=0[, timeout])

Telnet 表示到telnet服务器的连接。默认情况下,该实例最初未连接;该 open() 方法必须用于建立连接。或者,也可以将主机名和可选端口号传递给构造函数,在这种情况下,将在构造函数返回之前建立到服务器的连接。可选的 超时 参数指定阻塞操作(如连接尝试)的超时(以秒为单位)(如果未指定,将使用全局默认超时设置)。

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

这个类有很多 read_*() 方法。注意他们中的一些人 EOFError 当读取连接的结尾时,因为它们可以出于其他原因返回空字符串。请参见下面的个别说明。

A Telnet 对象是上下文管理器,可以在 with 语句。当 with 块结束 close() 方法被调用::

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

在 3.6 版更改: 已添加上下文管理器支持

参见

RFC 854 -Telnet协议规范

telnet协议的定义。

telnet对象

Telnet 实例具有以下方法:

Telnet.read_until(expected, timeout=None)

读取直到给定的字节字符串, 预期 ,遇到或直到 timeout 几秒钟过去了。

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

Telnet.read_all()

以字节的形式读取所有数据,直到EOF结束;阻塞直到连接关闭。

Telnet.read_some()

除非命中EOF,否则至少读取一个字节的熟数据。返回 b'' 如果EOF被击中。如果没有立即可用的数据,则阻止。

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 参数指定阻塞操作(如连接尝试)的超时(以秒为单位)(如果未指定,将使用全局默认超时设置)。

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

提出一个 auditing event telnetlib.Telnet.open 带着论据 selfhostport .

Telnet.msg(msg, *args)

当调试级别为时打印调试消息 > 0。如果存在额外的参数,则在消息中使用标准字符串格式运算符替换这些参数。

Telnet.set_debuglevel(debuglevel)

设置调试级别。价值越高 调试级别 ,您得到的调试输出越多(在 sys.stdout

Telnet.close()

关闭连接。

Telnet.get_socket()

返回内部使用的套接字对象。

Telnet.fileno()

返回内部使用的套接字对象的文件描述符。

Telnet.write(buffer)

将字节字符串写入套接字,使任何IAC字符加倍。如果连接被阻塞,这可能会阻塞。可以提高 OSError 如果连接已关闭。

提出一个 auditing event telnetlib.Telnet.write 带着论据 selfbuffer .

在 3.3 版更改: 这种方法用来提高 socket.error ,现在是的别名 OSError .

Telnet.interact()

交互功能,模拟非常哑的telnet客户机。

Telnet.mt_interact()

的多线程版本 interact() .

Telnet.expect(list, timeout=None)

直到正则表达式列表中的一个匹配为止。

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

返回三个项组成的元组:第一个匹配的正则表达式列表中的索引;返回匹配对象;以及读取到匹配为止(包括匹配)的字节。

如果找到文件结尾但未读取任何字节,则引发 EOFError . 否则,当没有匹配项时,返回 (-1, None, data) 在哪里? data 是到目前为止接收到的字节(如果发生超时,可能是空字节)。

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

Telnet.set_option_negotiation_callback(callback)

每次在输入流上读取telnet选项时, 回调 (如果设置)使用以下参数调用:回调(telnet socket,命令(do/dont/will/wont),选项)。以后telnetlib不执行其他操作。

telnet示例

说明典型用途的简单示例:

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'))