telnetlibTelnet客户端

源代码: Lib / telnetlib.py


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

telnet命令的符号常量为:IAC,DONT,DO,WONT,WILL,SE(子协商)结束),NOP(无操作),DM(数据标记),BRK(中断),IP(中断过程),AO(中止输出),AYT(你在那里),EC(EraseCharacter),EL(擦除线),GA(Go Ahead),SB(Subnegotiation Begin).

class telnetlib.Telnethost=None, port=0 [, timeout]

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

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

这个类有很多read_*()方法。请注意,其中一些提升EOFError读取连接结束时,因为其他原因可以返回空字符串。请参阅下面的个别说明.

A Telnetobject是一个上下文管理器,可以在with语句中使用。当with块结束时,调用close()方法:

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

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

另请参阅

RFC 854 Telnet协议规范
Telnet协议的定义.

Telnet Objects

Telnet实例有以下内容方法:

Telnet.read_untilexpected, timeout=None

读取直到遇到给定的字节字符串expected,或者直到timeout秒为止

当找不到匹配时,返回可用的内容,可能是空字节。举起EOFError如果连接关闭且没有熟食数据可用.

Telnet.read_all ()

读取所有数据,直到EOF为字节;阻止直到连接关闭.

Telnet.read_some ()

读取至少一个字节的熟食数据,除非EOF被击中。返回b"" ifEOF被击中。如果没有数据可以立即阻止.

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对之间收集的数据(子选项开始/结束)。当使用SE命令调用时,回调应该访问这些数据。这个方法永远不会阻塞.

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

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

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

Telnet.msgmsg, *args

在调试级别为>时打印调试消息。如果存在额外的参数,则使用标准的字符串格式化操作符在消息中替换它们.

Telnet.set_debugleveldebuglevel

设置调试级别。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.expectlist, timeout=None)的多线程版

读取直到正则表达式列表中的一个匹配.

第一个参数是正则表达式列表,要么编译(正则表达式对象),要么未编译(字节串)。第二个参数是超时,以秒为单位;默认是blockindefinitely.

返回三个元组的元组:匹配的第一个regularrexpression列表中的索引;匹配对象返回;并且字节读取并且包括匹配.

如果找到文件结尾并且没有读取字节,则抬起EOFError。否则,当没有匹配时,返回(-1, None, data) wheredata是到目前为止收到的字节(如果发生超时,可能是空字节).

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

Telnet.set_option_negotiation_callback (callback)

每次在输入流上读取telnet选项时,callback(如果设置)都使用以下参数调用:callback(telnet socket,命令(DO / DONT / WILL / WONT),选项)。之后telnetlib没有做其他动作

举例说明

说明典型用法的简单例子:

import getpassimport telnetlibHOST = "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"))