源代码: Lib/telnetlib.py




python telnetlib报错 python的telnetlib_telnet 80端口不通原因


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()
...


python telnetlib报错 python的telnetlib_telnet连接上后立刻关闭_02


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之后不执行其他操作。


python telnetlib报错 python的telnetlib_telnet 遗失对主机的连接_03


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'))