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 menos1
byte 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í,0
apunta 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ódulotelnetlib
no 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()
.