– Telnet客户端 – Internet协议和支持(Python教程)(参考资料)
telnetlib– Telnet客户端
源代码: 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.Telnet(host=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中更改:添加了上下文管理器支持
Telnet Objects
Telnet实例有以下内容方法:
Telnet.read_very_eager( )-
读取I / O中所有可能没有阻塞的内容(急切).
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.msg(msg, *args)-
在调试级别为
>时打印调试消息。如果存在额外的参数,则使用标准的字符串格式化操作符在消息中替换它们.
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)的多线程版-
读取直到正则表达式列表中的一个匹配.
第一个参数是正则表达式列表,要么编译(正则表达式对象),要么未编译(字节串)。第二个参数是超时,以秒为单位;默认是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"))