telnetlib 模块提供了一个Telnet 实现 Telnet 协议的类,凡是实现了 Telnet 协议的设都可以使用 telnetlib 进行登录。
通过 telnetlib 基础功能将其封装为类。
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import time
import telnetlib
class TelnetLib(object):
def __init__(self):
self.tn = None
self.EXIT = b'quitn'
self.LOGIN = b'Login'
self.USERNAME = b'Username:'
self.PASSWORD = b'Password:'
@staticmethod
def format(data):
return data.encode('UTF-8') + b'n'
def link(self,host,port=23,timeout=3):
# 连接设备
self.tn = telnetlib.Telnet(host,port,timeout)
def login(self,username,password):
# 监听登录事件
self.tn.read_until(self.LOGIN)
# 监听输入账户事件
self.tn.read_until(self.USERNAME)
# 输入账户
self.tn.write(self.format(username))
# 监听输入密码事件
self.tn.read_until(self.PASSWORD)
# 输入密码
self.tn.write(self.format(password))
def shell(self,command):
# 执行命令
self.tn.write(self.format(command))
# 延时0.5s
time.sleep(1)
# 在I/O不阻塞的情况下读取所有数据,否则返回空
data = self.tn.read_very_eager()
# 解码后返回数据
return data.decode('UTF-8')
def __del__(self):
# 退出设备
self.tn.write(self.EXIT)
# 关闭连接
self.tn.close()
if __name__ == '__main__':
tl = TelnetLib()
tl.link(host='127.0.0.1',timeout=3)
tl.login(username='admin',password='***')
return_value = tl.shell(command='display ip routing-table')
print(return_value)
Telnet 实例具有以下方法:
直到阅读到给定的字符串返回,或者超时返回。如果找不到匹配项,则返回可用的任何项,可能为空字符串。
Telnet.read_until(expected[,timeout])
读取所有数据直到EOF。
Telnet.read_all()
至少读取一个字节的熟数据。
Telnet.read_some()
读取所有熟数据。
Telnet.read_very_eager()
随时读取可用的数据。
Telnet.read_eager()
处理并返回队列中已有的数据。
Telnet.read_lazy()
返回已熟练队列中的任何数据。
Telnet.read_very_lazy()
返回SB / SE对之间收集的数据。
Telnet.read_sb_data()
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|