源代码: Lib/telnetlib.py
telnetlib模块提供了实现Telnet协议的Telnet类。有关协议的详细信息,请参阅RFC 854。此外,它还为协议字符(参见下面)和telnet选项提供了符号常量。telnet选项的符号名称遵循arpa/telnet中的定义。h,前导端末端被删除。用于通常不包括在arpa/telnet中的选项的符号名称。h,参见模块源代码本身。
telnet命令的符号常量是:IAC、don、DO、won、WILL、SE(子协商结束)、NOP(没有操作)、DM(数据标记)、BRK(中断)、IP(中断进程)、AO(中止输出)、AYT(在那里吗)、EC(擦除字符)、EL(擦除行)、GA(继续)、SB(子协商开始)。
class telnetlib.Telnet(host=None, port=0[, timeout])
表示到Telnet服务器的连接。默认情况下,实例最初没有连接;open()方法必须用于建立连接。或者,也可以将主机名和可选端口号传递给构造函数,在这种情况下,与服务器的连接将在构造函数返回之前建立。可选的超时参数指定阻塞操作(如连接尝试)的超时时间(以秒为单位)(如果未指定,将使用全局默认超时设置)。
不要重新打开已经连接的实例。
这个类有很多read_*()方法。注意,当读取连接的末尾时,它们中的一些会引发EOFError,因为它们可能会因为其他原因返回空字符串。参见下面的各个描述。
Telnet对象是上下文管理器,可以在with语句中使用。当with块结束时,close()方法被调用:
>>> from telnetlib import Telnet
>>> with Telnet('localhost', 23) as tn:
... tn.interact()
...
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_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命令调用回调时,回调应该访问这些数据。这个方法不会阻塞。
- Telnet.open(host, port=0[, timeout])
连接到主机。第二个可选参数是端口号,默认为标准Telnet端口(23)。可选的超时参数指定阻塞操作(如连接尝试)的超时时间(以秒为单位)(如果未指定,将使用全局默认超时设置)。
不要尝试重新打开已经连接的实例。
- 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 版更改: This method used to raise socket.error, which is now an alias of OSError.
- Telnet.interact()
交互功能,模拟一个Telnet客户端。
- Telnet.mt_interact()
交互式()的多线程版本。
- Telnet.expect(list, timeout=None)
读取一个正则表达式列表,直到其中一个匹配。
第一个参数是一个正则表达式列表,可以是已编译的(regex对象),也可以是未编译的(字节字符串)。第二个可选参数是超时,以秒为单位;默认是无限期阻塞。
返回包含三个项的元组:匹配的第一个正则表达式列表中的索引;返回的匹配对象;以及读取到并包含匹配的字节。
如果发现文件末尾没有读取字节,请抛出EOFError。否则,当没有匹配时,返回(-1,None, data),其中的数据是到目前为止收到的字节(如果发生超时,可能是空字节)。
如果一个正则表达式以贪婪匹配(如.*)结束,或者多个表达式可以匹配相同的输入,那么结果是不确定的,可能取决于I/O计时。
- Telnet.set_option_negotiation_callback(callback)
每次在输入流中读取telnet选项时,这个回调(如果设置了)将通过以下参数调用:callback(telnet socket, command (DO/ don /WILL/ won), option)。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"lsn")
tn.write(b"exitn")
print(tn.read_all().decode('ascii'))