Inhaltsverzeichnis:

Netcat in Python - Gunook
Netcat in Python - Gunook

Video: Netcat in Python - Gunook

Video: Netcat in Python - Gunook
Video: Intro to Replacing Netcat - Black Hat Python - ep. 4 2024, Juli
Anonim
Netcat in Python
Netcat in Python

Was ist netcat? Die Handbuchseite für netcat sagt folgendes: "Das Dienstprogramm nc (oder netcat) wird für so ziemlich alles unter der Sonne verwendet, das TCP-, UDP- oder UNIX-Domain-Sockets beinhaltet. Es kann TCP-Verbindungen öffnen, UDP-Pakete senden, beliebige abhören TCP- und UDP-Ports, Port-Scanning und Umgang mit IPv4 und IPv6 Im Gegensatz zu telnet(1), nc-Skripte gut und trennt Fehlermeldungen nach Standardfehlern, anstatt sie an die Standardausgabe zu senden, wie es telnet(1) bei einigen tut"

Im Wesentlichen ermöglicht Ihnen netcat die Verbindung zu anderen Servern über das TCP- oder UDP-Protokoll. TCP steht für Transmission Control Protocol und ist verbindungsorientiert. UDP steht für Universal Datagram Protocol und ist verbindungslos. TCP wird häufig für Internetanwendungen verwendet, während UDP für Medienstreaming oder VPNs verwendet wird.

Schritt 1: Wie fangen wir an?

Wie fangen wir an?
Wie fangen wir an?

Oben ist, wie netcat aufgerufen wird. Sie können sehen, dass es am Ende zwei Argumente gibt, die als "Ziel" und "Port" bezeichnet werden. Das Ziel bezieht sich auf einen Hostnamen oder eine IP-Adresse des Servers, zu dem wir eine Verbindung herstellen möchten, während sich der Port auf den Port des Servers bezieht, zu dem wir eine Verbindung herstellen möchten.

Schritt 2: Beginnen wir

Lass uns anfangen
Lass uns anfangen

Oben ist ein Anfangs-Python-Code. Wie Sie sehen, möchten wir die Argumente für das Programm ähnlich wie das eigentliche Dienstprogramm verarbeiten. Der Hostname ist das erste Argument nach dem Namen der ausführbaren Datei, während der Port das zweite Argument nach dem Namen der ausführbaren Datei in der Befehlszeile ist.

Schritt 3: Herstellen einer Verbindung

Herstellen einer Verbindung
Herstellen einer Verbindung

Lassen Sie uns eine netcat-Funktion erstellen, die wir verwenden können. Was wir hier im Grunde tun, ist, einen Socket zu erstellen und eine Verbindung zum Server mit den angegebenen Parametern herzustellen. Für den Befehl netcat sind die aktuellen Parameter der Hostname und der Port des Servers, zu dem wir versuchen, eine Verbindung herzustellen. Der Socket enthält die Parameter "socket. AF_INET" und "socket. SOCK_STREAM", da wir für dieses Tutorial standardmäßig eine TCP-Verbindung verwenden.

Schritt 4: Lassen Sie uns einige Inhalte senden

Lassen Sie uns einige Inhalte senden
Lassen Sie uns einige Inhalte senden

Wir haben unsere netcat-Funktion um einen dritten Parameter erweitert, "content". Es gibt eine Menge Inhalt hier, also lassen Sie uns ihn nach Zeilennummer aufschlüsseln.

Zeile 14-16: Wir senden den gesamten Inhalt über den Socket, warten eine Weile und schließen dann den Socket für alle ausgehenden Daten, damit der Socket weiß, dass keine Daten mehr kommen.

Zeile 18-26: Wir erstellen einen Puffer, um die Serverantwort zu speichern, und während der Socket Daten empfängt, hängen wir bis zu 1024 Byte Daten an das Ergebnis an, solange Daten zu lesen sind.

Zeile 28-29: Wir möchten, dass diese Netcat-Verbindung eine einmalige Verbindung ist, also erklären wir die Verbindung für geschlossen und schließen dann die Verbindung.

Zeile 31: Dies ist eine Standard-HTTP-Anfrage. Wenn Sie den Code mit den Befehlszeilenargumenten "google.com" und "80" ausführen, sehen Sie eine richtige

Schritt 5: Lassen Sie uns eine offene Verbindung haben

Lasst uns eine offene Verbindung haben
Lasst uns eine offene Verbindung haben

Der obige Code (der sich unter dem Code aus dem vorherigen Abschnitt befindet) ermöglicht es uns einfach, mehrere netcat-Befehle über eine pseudo-offene Verbindung auszuführen. (In Wirklichkeit wird jedes Mal, wenn Sie einen Befehl ausführen, eine neue TCP-Verbindung geöffnet und wieder geschlossen, sodass das Verhalten von netcat nicht wirklich emuliert wird. Wir tun dies nur zu Lernzwecken). Lassen Sie uns dies auch Zeile für Zeile aufschlüsseln:

Zeile 31: Wir wollen Befehle auf unbestimmte Zeit lesen, um die "Interaktivität" aufrechtzuerhalten

Zeile 32: Dies ist unser Puffer, der den Inhalt unserer Anfrage speichert

Zeile 36-45: Wir werden in den Puffer einlesen, bis wir eine leere Zeile lesen

Zeile 48: Wir rufen einfach unsere netcat-Funktion mit dem Hostnamen, dem Port und dem neu erstellten Inhalt (der richtig codiert ist) auf

Zeile 50: Wenn der Inhalt unseres Puffers jemals "Connection: Close" enthält (was anzeigt, dass wir die Verbindung schließen möchten), brechen wir einfach aus der Schleife aus

Schritt 6: Fazit

Am Ende dieses Tutorials sollten Sie eine minimale funktionierende Netcat-Implementierung haben. Ich überlasse es dem Benutzer als Übung, Funktionen zu implementieren wie:

1. Unterstützung anderer Protokolle

2. Festlegen des Codes, um die Verbindung nicht jedes Mal zu schließen

3. Hinzufügen von Flags, die Netcat bereits hat, um das Verhalten zu ändern

Empfohlen: