On this page
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 *])
- class *
不要重新打开已经连接的实例。
此类具有许多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''
。如果没有立即可用的数据,则阻止。
- 读取至少一个字节的烹饪数据,除非命中 EOF。如果命中 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
命令调用回调时,回调应该访问这些数据。此方法永远不会阻塞。
- 返回在 SB/SE 对之间收集的数据(子选项 begin/end)。当使用
Telnet.
open
(* host , port = 0 * [,* timeout *])- 连接到主机。可选的第二个参数是端口号,默认为标准 Telnet 端口(23)。可选的* timeout *参数以秒为单位指定用于阻止诸如连接try之类的操作的超时(如果未指定,将使用全局默认超时设置)。
不要try重新打开已连接的实例。
用参数self
,host
,port
引发auditing event telnetlib.Telnet.open
。
Telnet.
msg
(* msg ,* args *)- 当调试级别为
>
0 时,打印调试消息。如果存在其他参数,则使用标准的字符串格式运算符将它们替换为消息。
- 当调试级别为
Telnet.
set_debuglevel
(* debuglevel *)- 设置调试级别。 * debuglevel *的值越高,您获得的调试输出就越多(在
sys.stdout
上)。
- 设置调试级别。 * debuglevel *的值越高,您获得的调试输出就越多(在
Telnet.
close
( )- 关闭连接。
Telnet.
get_socket
( )- 返回内部使用的套接字对象。
Telnet.
fileno
( )- 返回内部使用的套接字对象的文件 Descriptors。
Telnet.
write
(* buffer *)- 将字节字符串写入套接字,使所有 IAC 字符加倍。如果连接被阻止,则可能会阻止。如果连接已关闭,则可能引发OSError。
用参数self
,buffer
引发auditing event telnetlib.Telnet.write
。
在版本 3.3 中更改:此方法曾经引发socket.error,现在是OSError的别名。
Telnet.
interact
( )- 交互Function,模拟非常笨拙的 TelnetClient 端。
Telnet.
mt_interact
( )- 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'))