Das telnetlib-Modul in Python
Das Telnet-Protokoll, das 1969 entwickelt und als IETF oder Internet Engineering Task Force standardisiert wurde, ist ein Client-Server-Protokoll, das auf einem zuverlässigen verbindungsorientierten Transport basiert.
Es ist ein Anwendungsprotokoll, das im LAN oder Local Area Network und im Internet verwendet wird. Das Telnet-Protokoll bietet eine bidirektionale (in beide Richtungen) interaktive textorientierte Kommunikationseinrichtung über eine virtuelle Terminalverbindung (ein Computerterminal oder ein elektronisches Hardwaregerät).
Beim Telnet-Protokoll werden die Daten des Benutzers über eine 8-Bit-Byte-orientierte Datenverbindung über das TCP oder Transmission Control Protocol verstreut. Die Programmiersprache Python hat ein telnetlib-Modul, das das Telnet-Protokoll implementiert.
In diesem Artikel lernen wir die Bibliothek telnetlib kennen.
Die telnetlib-Bibliothek in Python
Das Modul telnetlib hat eine Klasse Telnet, die die eigentliche Implementierung des Telnet-Protokolls enthält.
Diese Klasse repräsentiert eine Setup-Verbindung zu einem Telnet-Server. Der Klassenkonstruktor Telnet akzeptiert zwei Parameter: host und port. Standardmäßig ist der host None und der port ist 0.
Es folgt die Signatur der Klasse Telnet.
class telnetlib.Telnet(host=None, port=0)
Die Klasse Telnet hat die folgenden Methoden.
read_until(expected, timeout = None)– Liest, bis eine gegebene Bytefolge,expected, gefunden wird oder bis dietimeout-Anzahl von Sekunden verstrichen ist.read_all()- Liest alle Daten als Bytes bis EOF oder End of File gefunden wird. Es blockiert auch, bis die Verbindung geschlossen wird.read_some()– Liest mindestens1Datenbyte, bis EOF angetroffen wird.read_very_eager()- Lesen Sie alles Mögliche, ohne die Input-Output- oder I/O-Operationen zu blockieren.read_eager()- Liest alle leicht verfügbaren Daten.read_lazy()- Daten bereits in den Warteschlangen verarbeiten und zurückgeben.read_very_lazy()- Gibt alle Daten zurück, die in der Warteschlange verfügbar sind.read_sb_data()– Gibt die Daten zurück, die zwischen einem SB/SE-Paar oder Suboption Begin/Suboption End gesammelt werden.open(host, post = 0)– Verbinden Sie sich mit dem angegebenen Host unter Verwendung des standardmäßigen Telnet-Protokollports23. Hier zeigt0auf Port23.msg(msg, *args)- Gibt eine Debug-Meldung aus, wenn der Debug-Level über0liegt. Alle zusätzlichen Argumente werden für die Nachricht mit dem Standard-String-Formatierungsoperator oder%ersetzt.set_debuglevel(debuglevel)- Debug-Level setzen.close()- Schließt eine Verbindung zum Telnet-Server.get_socket()- Gibt das intern verwendete Socket-Objekt zurück.fileno()- Gibt den Dateideskriptor des intern verwendeten Socket-Objekts zurück.write(buffer)- Schreibt einen Byte-String in den Socket der Verbindung.interact()- Dies ist eine interaktive Funktion, die einen sehr dummen Telnet-Client emuliert oder mit ihm übereinstimmt.mt_interact()- Eine Multithread-Interaktionsfunktion.expect(list, timeout = None)- Liest die Daten, bis ein regulärer Ausdruck aus einer Liste regulärer Ausdrücke passt.set_option_negotiation_callback(callback)– Jedes Mal, wenn eine Telnet-Option im Eingangsdatenfluss gelesen wird, wird diese Callback-Funktion mit den folgenden Parametern aufgerufen: callback(telnet socket, command (DO/DONT/WILL/WONT), option). Danach erfolgt keine weitere Operation durch dastelnetlib-Modul.
Beispiel
Das Folgende ist ein einfaches Beispiel, das versucht, die Verwendung des telnetlib-Moduls darzustellen. Siehe den folgenden Python-Code.
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"))
Das obige Python-Skript verbindet sich mit localhost oder 127.0.0.1, einer Loopback-Adresse in Computersystemen.
Als nächstes sind zwei Eingaben erforderlich: Benutzername und Passwort. Das getpass-Modul ermöglicht es uns, Passworteingaben entgegenzunehmen, ohne sie visuell preiszugeben. Anschließend verbindet sich das Skript über die Klasse Telnet mit dem Host.
Es schreibt die Benutzernamen- und Passworteingaben neben die Zeichenketten Login: und Password:. Zuletzt führt es die Befehle ls und exit aus und liest alle Bytedaten mit der Methode read_all().
