转载出处:http://blog.csdn.net/qq_25134989/article/details/78918188
# -*- coding: utf-8 -*- import telnetlib import time def telnetip(tnip): # 连接Telnet服务器 tn = telnetlib.Telnet(tnip, port=23, timeout=50) # 输入登录用户名 tn.read_until('Username:') tn.write(username + '\n') # 输入登录密码 # tn.read_until('Password:') tn.write(password + '\n') time.sleep(1) tn.write('system' + '\n') # 输入命令 tn.write('domain paoa' + '\n') tn.write('****' + '\n') tn.write('****' + '\n') time.sleep(50) result1 = tn.read_very_eager() # 获得结果 print result1 # 命令执行完毕后,终止Telnet连接(或输入exit退出) tn.close() # tn.write('exit\n') if __name__ == '__main__': # 配置选项 ip = '****' # Telnet交换机IP username = '****' # 登录用户名 password = '****' # 登录密码 telnetip(ip)
下面是telnetlib模块的API用法(中文版)(来源:http://python.usyiyi.cn/documents/python_352/library/telnetlib.html)
源代码: Lib/telnetlib.py
telnetlib
模块提供了实现Telnet协议的Telnet
类。有关协议的详细信息,请参见 RFC 854。此外,它为协议字符(见下文)和telnet选项提供符号常量。telnet选项的符号名称遵循arpa/telnet.h
中的定义,删除了前导TELOPT_
。对于传统上不包括在arpa/telnet.h
中的选项的符号名称,请参阅模块源本身。
telnet命令的符号常量有:IAC,DONT,DO,WONT,WILL,SE(子协议结束),NOP(无操作),DM(数据标记),BRK中止输出),AYT(您有),EC(擦除字符),EL(擦除线),GA(前进),SB(子协商开始)。
-
class
-
Telnet
表示到Telnet服务器的连接。实例最初未默认连接;必须使用open()
方法建立连接。或者,主机名和可选端口号也可以传递给构造函数,在这种情况下,将在构造函数返回之前建立与服务器的连接。可选的timeout参数指定阻塞操作(如连接尝试)的超时(以秒为单位)(如果未指定,将使用全局默认超时设置)。不要重新打开已连接的实例。
这个类有许多
read_*()
方法。注意,当读取连接结束时,其中一些引发EOFError
,因为它们可能由于其他原因返回一个空字符串。请参阅下面的各个说明。
telnetlib.
Telnet
(host=None, port=0[, timeout])
也可以看看
-
RFC 854 - Telnet协议规范
- Telnet协议的定义。
21.19.1.Telnet对象
Telnet
实例具有以下方法:
-
读取直到遇到预期的给定字节字符串,或直到超时秒过去。
当找不到匹配项时,返回可用的可用空间,可能为空字节。如果连接已关闭且没有可用的已处理过的数据,则引发
EOFError
。
Telnet.
read_until
(expected, timeout=None)
-
读取所有数据,直到EOF为字节;阻塞直到连接关闭。
Telnet.
read_all
()
-
读取至少一个字节的处理过的数据,除非命中EOF。如果命中EOF,返回
b''
。如果没有可用的数据,则阻止。
Telnet.
read_some
()
-
读取I / O(热切)中可以没有阻塞的所有内容。
如果连接关闭且没有可用的已处理过的数据,则引发
EOFError
。如果没有熟的数据,返回b''
。除非在IAC序列中间,否则不要阻塞。
Telnet.
read_very_eager
()
-
阅读随时可用的数据。
如果连接关闭且没有可用的已烹饪数据,则提高
EOFError
。如果没有熟的数据,返回b''
。除非在IAC序列中间,否则不要阻塞。
Telnet.
read_eager
()
-
处理和返回队列中已有的数据(延迟)。
如果连接关闭且无可用数据,则提升
EOFError
。如果没有熟的数据,返回b''
。除非在IAC序列中间,否则不要阻塞。
Telnet.
read_lazy
()
-
返回在cooked队列中可用的任何数据(非常懒惰)。
如果连接关闭且无可用数据,则提升
EOFError
。如果没有熟的数据,返回b''
。这种方法永远不会阻塞。
Telnet.
read_very_lazy
()
-
返回在SB / SE对之间收集的数据(子选项开始/结束)。当使用
SE
命令调用时,回调应该访问这些数据。这种方法永远不会阻塞。
Telnet.
read_sb_data
()
-
连接到主机。可选的第二个参数是端口号,默认为标准Telnet端口(23)。可选的timeout参数指定阻塞操作(如连接尝试)的超时(以秒为单位)(如果未指定,将使用全局默认超时设置)。
不要尝试重新打开已连接的实例。
Telnet.
open
(host, port=0[, timeout])
-
当调试级别为
>
0时,打印调试消息。如果存在额外的参数,它们将在消息中使用标准字符串格式化运算符进行替换。
Telnet.
msg
(msg, *args)
-
设置调试级别。debuglevel的值越高,您获得的调试输出越多(在
sys.stdout
)。
Telnet.
set_debuglevel
(debuglevel)
-
关闭连接。
Telnet.
close
()
-
返回内部使用的套接字对象。
Telnet.
get_socket
()
-
返回内部使用的套接字对象的文件描述符。
Telnet.
fileno
()
-
向套接字写入一个字节字符串,将任何IAC字符加倍。这可以阻止连接被阻止。如果连接关闭,可能会产生
OSError
。在版本3.3中已更改:此方法用于引发
socket.error
,现在是OSError
的别名。
Telnet.
write
(buffer)
-
交互功能,模拟一个非常笨的Telnet客户端。
Telnet.
interact
()
-
interact()
的多线程版本。
Telnet.
mt_interact
()
-
直到从正则表达式列表中匹配到一个为止。
第一个参数是正则表达式的列表,其被编译(regex objects)或未编译(字节串)。可选的第二个参数是超时,以秒为单位;默认是无限期阻塞。
返回三个项的元组:匹配的第一个正则表达式的列表中的索引;返回匹配对象;和字节读取直到并包括匹配。
如果找到文件结尾且未读取任何字节,请提出
EOFError
。Otherwise, when nothing matches, return(-1, None, data)
where data is the bytes received so far (may be empty bytes if a timeout happened).如果正则表达式以贪婪匹配(例如
.*
)结束或者如果多个表达式可以匹配相同的输入,则结果是非确定性的,并且可能取决于I / O定时。
Telnet.
expect
(list, timeout=None)
-
每次在输入流上读取telnet选项时,使用以下参数调用此回调(如果设置):callback(telnet socket,command(DO / DONT / WILL / WONT) 。其后没有其他操作由telnetlib完成。
Telnet.
set_option_negotiation_callback
(callback)