简介
telnetlib模块提供的Telnet类实现了Telnet协议(参见rfc854)。它为协议字符和telnet选项提供符号常量,符号常量来源于arpa/telnet.h,去掉了前缀TELOPT_。
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=None, port=0[, timeout])
快速入门
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author Rongzhong Xu 2016-08-25 wechat: pythontesting
"""
Name: telnet_demo.py
Tesed in python3.5
"""
import telnetlib
HOST = "172.17.100.18"
user = "test"
password = "123456"
def command(con, flag, str_=""):
data = con.read_until(flag.encode())
print(data.decode(errors='ignore'))
con.write(str_.encode() + b"\n")
return data
tn = telnetlib.Telnet(HOST)
command(tn, "login: ", user)
if password:
command(tn, "Password: ", password)
command(tn, "$", "ls")
command(tn, "$", " exit")
command(tn, "$", "")
tn.close()
执行结果:
$ python3 telnet_demo.py
CentOS release 6.7 (Final)
Kernel 2.6.32-573.18.1.el6.x86_64 on an x86_64
login:
Password:
Last login: Thu Aug 25 17:20:18 from 172.17.153.6
[test@public01 ~]$
ls
[test@public01 ~]$
exit
logout
参考资料
方法
Telnet.read_until(expected[, timeout])
读取直到遇到了给定的字符串expected或超时秒数。
当找不到匹配时,返回读取内容。连接关闭或者没有数据时触发EOFError异常。
Telnet.read_all()
读取所有数据直到EOF,阻塞直到连接关闭。
Telnet.read_some()
读取至少一个字节的数据,除非EOF。 如果没有数据则阻塞。
Telnet.read_very_eager()
非阻塞地读取。连接关闭或者没有数据时触发EOFError异常。返回b”如果没有数据,
Telnet.read_eager()
读取的已有数据。(快)
连接关闭或者没有数据时触发EOFError异常。返回b”如果没有数据,
Telnet.read_lazy()
读取的已有数据(懒)
连接关闭或者没有数据时触发EOFError异常。返回b”如果没有数据,
Telnet.read_very_lazy()
读取的已有数据(很懒)
连接关闭或者没有数据时触发EOFError异常。返回b”如果没有数据,
Telnet.read_sb_data()
返回的SB/SE pair (suboption begin/end)之间的数据。此方法永远不会阻塞。
Telnet.open(host[, port[, timeout]])
连接到主机。可选的第二个参数是默认为标准的 Telnet 端口 (23) 的端口号。可选的超时参数指定以秒计) 阻塞操作 (如连接尝试超时 (如果不指定,将使用全局默认超时设置)。
Telnet.msg(msg[, *args])
当调试级别为> 0 打印调试消息。
Telnet.set_debuglevel(debuglevel)
设置调试级别。debuglevel越高信息越多。
Telnet.close()
关闭该连接。
Telnet.get_socket()
返回套接字供内部使用。
Telnet.fileno()
返回套接字对象内部使用的文件描述符。
Telnet.write(buffer)
写入字符串到套接字,加倍 IAC 的任何字符。连接关闭是可能触发OSError异常。
Telnet.interact()
交由用户控制。
Telnet.mt_interact()
多线程的版本的interact()。
Telnet.expect(list[, timeout])
读取直到匹配正则表达式项列表中的一个。
list是一个正则表达式列表,包含编译(regex 对象)或未编译(字节字符串)。timeout以秒为单位, 默认值为无限期阻塞。
返回元组的三个项目: index为匹配正则表达式的位置;match 对象;此时读了的字节。
文件结尾或没有数据时触发EOFError异常,不匹配时返回(-1, None, data)。
如果正则表达式是贪婪模式或者如果多个表达式可以匹配相同的输入,结果是不确定的,可能取决于I/O定时。
Telnet.set_option_negotiation_callback(callback)
每次从输入流读取telnet选项时,调用callback(telnet socket, command (DO/DONT/WILL/WONT), option),后续步骤不会执行。