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_lazy()¶
处理并返回已经在队列中的数据(惰性)。
提高
EOFError
如果连接关闭且没有可用数据。返回b''
如果没有现成的数据。除非在IAC序列中间,否则不要阻塞。
- Telnet.read_sb_data()¶
返回在sb/se对之间收集的数据(子选项begin/end)。当使用
SE
命令。这种方法从不阻塞。
- Telnet.open(host, port=0[, timeout])¶
连接到主机。可选的第二个参数是端口号,默认为标准telnet端口(23)。可选的 timeout 参数指定阻塞操作(如连接尝试)的超时(以秒为单位)(如果未指定,将使用全局默认超时设置)。
不要尝试重新打开已连接的实例。
提出一个 auditing event
telnetlib.Telnet.open
带着论据self
,host
,port
.
- 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
带着论据self
,buffer
.在 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'))