20.14. telnetlibTelnet client

源程序代码:Lib/telnetlib.py


Telnetlib模块提供了一个实现 Telnet 协议的Telnet类。请参阅 RFC 854有关议定书 》 的详细信息。此外,它提供符号常量协议字符 (见下文),以及远程登录选项。Telnet 选项的符号名称遵循中arpa/telnet.h,使用TELOPT_删除领先的定义。传统上不包括在arpa/telnet.h的选项的符号名称,请参阅模块源代码本身。

Telnet 命令符号常量是:IAC, DONT, DO, WONT, WILL, SE (Subnegotiation End), NOP (No Operation), DM (Data Mark), BRK (Break), IP (Interrupt process), AO (Abort output), AYT (Are You There), EC (Erase Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation Begin)

class telnetlib.Telnet([host[, port[, timeout]]])

Telnet 表示到 Telnet 服务器的连接。默认情况下 ; 最初不是连接的实例必须使用open ()方法来建立连接。另外,主机名和可选的端口号可以传递给构造函数,向构造函数返回之前,在这种情况下将建立到服务器的连接。可选的超时参数指定以秒计) 阻塞操作 (如连接尝试超时 (如果不指定,将使用全局默认超时设置)。

不重启已经连接的实例。

此类具有很多的read_*()方法。注意其中一些引发EOFError连接端读取时,因为他们可以因为其他原因返回一个空字符串。请参阅下文的逐一描述。

2.6 版本中的更改:添加了 timeout (超时)

请参见

RFC 854 - Telnet Protocol Specification
Definition of the Telnet protocol.

20.14.1. Telnet 对象

Telnet实例具有以下方法:

Telnet.read_until(expected[, timeout])

直到遇到了给定的字符串,预期,或直到超时秒数已通过读取。

当找不到匹配时,返回相反,不管是可用可能为空的字符串。提高EOFError ,如果关闭了连接并且没有煮熟的数据可用。

Telnet.read_all()

读取所有数据直到 EOF ;阻塞,直到连接关闭。

Telnet.read_some()

读取至少一个字节的煮熟的数据,除非命中 EOF。如果打了 EOF,返回' '如果没有数据可立即,阻止。

Telnet.read_very_eager()

阅读一切可以无阻塞 i/o (渴望)。

提高EOFError如果关闭连接和没有煮熟的可用数据。如果没有还可以返回'否则熟数据可用。不阻止,除非在 IAC 序列。

Telnet.read_eager()

读取的现成数据。

提高EOFError如果关闭连接和没有煮熟的可用数据。如果没有还可以返回'否则熟数据可用。不阻止,除非在 IAC 序列。

Telnet.read_lazy()

已经在队列 (惰性) 的流程和返回的数据。

提高EOFError如果关闭连接和没有可用的数据。如果没有还可以返回'否则熟数据可用。不阻止,除非在 IAC 序列。

Telnet.read_very_lazy()

返回任何数据的煮熟的队列中可用 (很懒)。

提高EOFError如果关闭连接和没有可用的数据。如果没有还可以返回'否则熟数据可用。这种方法永远不会阻止。

Telnet.read_sb_data()

返回的数据收集 (suboption 开始/结束) 某人/SE 对之间。它与SE命令调用时,回调应该访问这些数据。此方法永远不会阻塞。

新版本 2.3。

Telnet.open(host[, port[, timeout]])

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

不要试图重新打开一个已经连接的实例。

2.6 版本中的更改:添加了超时

Telnet.msg(msg[, *args])

当调试级别为> 0 打印调试消息。如果存在额外的参数,在消息中使用标准字符串格式设置操作人员取代他们。

Telnet.set_debuglevel(debuglevel)

设置调试级别。越高的值debuglevel,更多的调试输出你就会 ( sys.stdout)。

Telnet.close()

关闭该连接。

Telnet.get_socket()

返回套接字对象在内部使用。

Telnet.fileno()

返回套接字对象内部使用的文件描述符。

Telnet.write(buffer)

字符串写入套接字,加倍 IAC 的任何字符。如果连接被阻止,这可以阻止。如果连接已关闭,可以提出socket.error

Telnet.interact()

交互功能模拟非常愚蠢的 Telnet 客户端。

Telnet.mt_interact()

多线程的版本的interact()

Telnet.expect(list[, timeout])

读取直到从正则表达式匹配项列表中的其中一位。

第一个参数是一个正则表达式,要么编译 (regex 对象) 或编译 (字符串) 的列表。可选的第二个参数是超时以秒为单位 ;默认值为无限期阻塞。

返回一个元组的三个项目: 第一个正则表达式相匹配 ; 列表中的索引match 对象返回 ;和读到的文本,包括这场比赛。

如果找到文件结尾,并且没有文本阅读,提高EOFError否则,当什么都不匹配时,会返回(-1, 忠县文本) 文本在哪里为止收到的文本 (如果超时发生可能是空字符串)。

如果正则表达式以贪婪的比赛结束 (如.*) 或者如果多个表达式可以匹配相同的输入,结果是不确定的并可能取决于 I/O 时间。

Telnet.set_option_negotiation_callback(callback)

每次一个 telnet 选项读取输入流,此回调(如果设置) 被称为带有以下参数: 回调选项命令 (做/不要/会/不会) telnet 套接字)。执行任何其他操作是通过 telnetlib 之后不完成的。

20.14.2. Telnet 例子

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

import getpass
import sys
import telnetlib

HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("ls\n")
tn.write("exit\n")

print tn.read_all()