El módulo telnetlib en Python
El protocolo Telnet, desarrollado en 1969 y estandarizado como IETF o Internet Engineering Task Force, es un protocolo cliente-servidor basado en un transporte confiable orientado a la conexión.
Es un protocolo de aplicación utilizado en la LAN o red de área local e Internet. El protocolo Telnet proporciona una facilidad de comunicación bidireccional (en ambas direcciones) interactiva orientada a texto a través de una conexión de terminal virtual (una terminal de computadora o un dispositivo de hardware electrónico).
En el protocolo Telnet, los datos del usuario se dispersan en una conexión de datos orientada a bytes de 8 bits sobre TCP o Protocolo de control de transmisión. El lenguaje de programación Python tiene un módulo telnetlib que implementa el protocolo Telnet.
En este artículo, aprenderemos sobre la biblioteca telnetlib.
La biblioteca telnetlib en Python
El módulo telnetlib tiene una clase Telnet que contiene la implementación real del protocolo Telnet.
Esta clase representa una conexión de configuración a un servidor Telnet. El constructor de la clase Telnet acepta dos parámetros: host y port. Por defecto, el host es None, y el port es 0.
A continuación se muestra la firma de la clase Telnet.
class telnetlib.Telnet(host=None, port=0)
La clase Telnet tiene los siguientes métodos.
read_until(expected, timeout = None)- Leer hasta que se encuentre una cadena de bytes dada,expected, o hasta que haya pasado la cantidad de segundos detimeout.read_all()- Lee todos los datos como bytes hasta que se encuentra EOF o End of File. También bloquea hasta que se cierra la conexión.read_some()- Leer al menos1byte de datos hasta que se encuentre EOF.read_very_eager()- Sin bloquear las operaciones de Entrada-Salida o E/S, lee todo lo posible.read_eager()- Lee todos los datos fácilmente disponibles.read_lazy()- Procesa y devuelve datos que ya están dentro de las colas.read_very_lazy()- Devuelve cualquier dato que esté disponible en la cola.read_sb_data()- Devuelve los datos que se recopilan entre un par SB/SE o Suboption Begin/Suboption End.open(host, post = 0): conéctese al host especificado utilizando el puerto de protocolo Telnet predeterminado23. Aquí,0apunta al puerto23.msg(msg, *args)- Imprime un mensaje de depuración cuando el nivel de depuración es superior a0. Todos los argumentos adicionales se sustituyen por el mensaje utilizando el operador de formato de cadena estándar o%.set_debuglevel(debuglevel)- Establece el nivel de depuración.close()- Cierra una conexión al servidor Telnet.get_socket()- Devuelve el objeto socket utilizado internamente.fileno()- Devuelve el descriptor de archivo del objeto socket utilizado internamente.write(buffer)- Escribe una cadena de bytes en el socket de la conexión.interact()- Es una función interactiva que emula o coincide con un cliente Telnet muy tonto.mt_interact()- Una función de interacción multiproceso.expect(list, timeout = None): lee los datos hasta que coincida una expresión regular de una lista de expresiones regulares.set_option_negotiation_callback(callback): cada vez que se lee una opción de telnet en el flujo de datos de entrada, se llama a esta función de devolución de llamada con los siguientes parámetros: devolución de llamada (socket de telnet, comando (DO/DONT/WILL/WONT), opción). El módulotelnetlibno realiza ninguna otra operación después.
Ejemplo
El siguiente es un ejemplo directo que intenta representar el uso del módulo telnetlib. Consulte el siguiente código de Python.
import getpass
import telnetlib
host = "127.0.0.1"
user = input("Username: ")
password = getpass.getpass()
tn = telnetlib.Telnet(host)
tn.read_until(b"Login: ")
tn.write(user.encode("ascii") + b"\n")
if password:
tn.read_until(b"Password: ")
tn.write(password.encode("ascii") + b"\n")
tn.write(b"ls\n")
tn.write(b"exit\n")
print(tn.read_all().decode("ascii"))
El script de Python anterior se conectará al localhost o 127.0.0.1, una dirección de bucle invertido en los sistemas informáticos.
A continuación, tomará dos entradas: nombre de usuario y contraseña. El módulo getpass nos permite tomar entradas de contraseña sin exponerlas visualmente de forma segura. Luego, el script se conectará al host usando la clase Telnet.
Escribirá las entradas de nombre de usuario y contraseña junto a las cadenas Login: y Password:. Por último, ejecutará los comandos ls y exit y leerá todos los datos de bytes utilizando el método read_all().
