telnetlib
El módulo proporciona una Telnet
realización de Telnet
dichos acuerdos, aquellos que lograron Telnet
el acuerdo proporcionado se pueden utilizar telnetlib
para iniciar sesión.
Por telnetlib
funciones básicas empaquetadas como clase.
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import time
import telnetlib
class TelnetLib(object):
def __init__(self):
self.tn = None
self.EXIT = b'quit\n'
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', port=23, timeout=3)
tl.login(username='admin', password='***')
return_value = tl.shell(command='display ip routing-table')
print(return_value)
La instancia de Telnet tiene los siguientes métodos:
Regrese hasta que se lea la cadena dada, o regrese después del tiempo de espera. Si no se encuentra ninguna coincidencia, se devuelve cualquier elemento disponible, que puede ser una cadena vacía.
Telnet.read_until(expected[, timeout])
Leer todos los datos hasta EOF.
Telnet.read_all()
Lea al menos un byte de datos preparados.
Telnet.read_some()
Lea todos los datos cocinados.
Telnet.read_very_eager()
Lea los datos disponibles en cualquier momento.
Telnet.read_eager()
Procese y devuelva los datos que ya están en la cola.
Telnet.read_lazy()
Devuelve cualquier dato en la cola de expertos.
Telnet.read_very_lazy()
Devuelve los datos recopilados entre el par SB / SE.
Telnet.read_sb_data()