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 mindestens1
Datenbyte, 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 zeigt0
auf Port23
.msg(msg, *args)
- Gibt eine Debug-Meldung aus, wenn der Debug-Level über0
liegt. 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()
.