21.19. telnetlib - Telnet客户端

源代码: 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中止输出),AYT(您有),EC(擦除字符),EL(擦除线),GA(前进),SB(子协商开始)。

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

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

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

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

也可以看看

RFC 854 - Telnet协议规范
Telnet协议的定义。

21.19.1.Telnet对象

Telnet实例具有以下方法:

Telnet.read_until(expected, timeout=None)

读取直到遇到预期的给定字节字符串,或直到超时秒过去。

当找不到匹配项时,返回可用的可用空间,可能为空字节。如果连接已关闭且没有可用的已处理过的数据,则引发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()

返回在cooked队列中可用的任何数据(非常懒惰)。

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

Telnet.read_sb_data()

返回在SB / SE对之间收集的数据(子选项开始/结束)。当使用SE命令调用时,回调应该访问这些数据。这种方法永远不会阻塞。

Telnet.open(host, port=0[, timeout])

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

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

Telnet.msg(msg, *args)

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

Telnet.set_debuglevel(debuglevel)

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

Telnet.close()

关闭连接。

Telnet.get_socket()

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

Telnet.fileno()

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

Telnet.write(buffer)

向套接字写入一个字节字符串,将任何IAC字符加倍。这可以阻止连接被阻止。如果连接关闭,可能会产生OSError

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

Telnet.interact()

交互功能,模拟一个非常笨的Telnet客户端。

Telnet.mt_interact()

interact()的多线程版本。

Telnet.expect(list, timeout=None)

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

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

返回三个项的元组:匹配的第一个正则表达式的列表中的索引;返回匹配对象;和字节读取直到并包括匹配。

如果找到文件结尾且未读取任何字节,请提出EOFErrorOtherwise, when nothing matches, return (-1, None, data) where data is the bytes received so far (may be empty bytes if a timeout happened).

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

Telnet.set_option_negotiation_callback(callback)

每次在输入流上读取telnet选项时,使用以下参数调用此回调(如果设置):callback(telnet socket,command(DO / DONT / WILL / WONT) 。其后没有其他操作由telnetlib完成。

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