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_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)或未编译(字节串)。可选的第二个参数是超时,以秒为单位;默认是无限期阻塞。
返回三个项的元组:匹配的第一个正则表达式的列表中的索引;返回匹配对象;和字节读取直到并包括匹配。
如果找到文件结尾且未读取任何字节,请提出
EOFError
。Otherwise, 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'))