Le module telnetlib en Python
Le protocole Telnet, développé en 1969 et normalisé sous le nom d’IETF ou Internet Engineering Task Force, est un protocole client-serveur basé sur un transport fiable orienté connexion.
Il s’agit d’un protocole d’application utilisé sur le LAN ou le réseau local et sur Internet. Le protocole Telnet fournit une installation de communication interactive orientée texte bidirectionnelle (dans les deux sens) via une connexion de terminal virtuel (un terminal informatique ou un dispositif matériel électronique).
Dans le protocole Telnet, les données de l’utilisateur sont dispersées sur une connexion de données orientée octet 8 bits via le protocole TCP ou Transmission Control Protocol. Le langage de programmation Python possède un module telnetlib
qui implémente le protocole Telnet.
Dans cet article, nous allons découvrir la bibliothèque telnetlib
.
La bibliothèque telnetlib
en Python
Le module telnetlib
possède une classe Telnet
qui contient l’implémentation proprement dite du protocole Telnet.
Cette classe représente une connexion de configuration à un serveur Telnet. Le constructeur de la classe Telnet
accepte deux paramètres : host
et port
. Par défaut, le hôte
est None
et le port
est 0
.
Voici la signature de la classe Telnet
.
class telnetlib.Telnet(host=None, port=0)
La classe Telnet
possède les méthodes suivantes.
read_until(expected, timeout = None)
- Lire jusqu’à ce qu’une chaîne d’octets donnée,expected
, soit trouvée ou jusqu’à ce que le nombre de secondestimeout
se soit écoulé.read_all()
- Lit toutes les données sous forme d’octets jusqu’à ce que EOF ou End of File soit trouvé. Il bloque également jusqu’à ce que la connexion soit fermée.read_some()
- Lit au moins1
octet de données jusqu’à ce qu’EOF soit rencontré.read_very_eager()
- Sans bloquer les opérations d’entrée-sortie ou d’E/S, lisez tout ce qui est possible.read_eager()
- Lire toutes les données facilement disponibles.read_lazy()
- Traite et renvoie les données déjà présentes dans les files d’attente.read_very_lazy()
- Renvoie toutes les données disponibles dans la file d’attente.read_sb_data()
- Renvoie les données qui sont collectées entre une paire SB/SE ou Suboption Begin/Suboption End.open(host, post = 0)
- Connectez-vous à l’hôte spécifié en utilisant le port de protocole Telnet par défaut23
. Ici,0
pointe vers le port23
.msg(msg, *args)
- Affiche un message de débogage lorsque le niveau de débogage est supérieur à0
. Tous les arguments supplémentaires sont remplacés par le message à l’aide de l’opérateur de formatage de chaîne standard ou%
.set_debuglevel(debuglevel)
- Définit le niveau de débogage.close()
- Ferme une connexion au serveur Telnet.get_socket()
- Renvoie l’objet socket utilisé en interne.fileno()
- Renvoie le descripteur de fichier de l’objet socket utilisé en interne.write(buffer)
- Ecrit une chaîne d’octets dans le socket de la connexion.interact()
- C’est une fonction interactive qui émule ou correspond à un client Telnet très stupide.mt_interact()
- Une fonction d’interaction multithread.expect(list, timeout = None)
- Lit les données jusqu’à ce qu’une expression régulière d’une liste d’expressions régulières corresponde.set_option_negotiation_callback(callback)
- Chaque fois qu’une option telnet est lue sur le flux de données d’entrée, cette fonction de rappel est appelée avec les paramètres suivants : callback(telnet socket, command (DO/DONT/WILL/WONT), option). Aucune autre opération n’est effectuée par la suite par le moduletelnetlib
.
Exemple
Ce qui suit est un exemple simple qui tente de décrire l’utilisation du module telnetlib
. Reportez-vous au code Python suivant.
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"))
Le script Python ci-dessus se connectera au localhost
ou 127.0.0.1
, une adresse de bouclage dans les systèmes informatiques.
Ensuite, il faudra deux entrées : nom d’utilisateur et mot de passe. Le module getpass
nous permet de prendre des entrées de mot de passe sans les exposer visuellement en toute sécurité. Ensuite, le script se connectera à l’hôte en utilisant la classe Telnet
.
Il écrira les entrées de nom d’utilisateur et de mot de passe à côté des chaînes Login:
et Password:
. Enfin, il exécutera les commandes ls
et exit
et lira toutes les données d’octets à l’aide de la méthode read_all()
.