Netcat oder nc ist ein Netzwerkdienstprogramm zum Debuggen und Untersuchen des Netzwerks.
Dieses Dienstprogramm kann zum Erstellen und Untersuchen von TCP/UDP-Verbindungen verwendet werden. Die größte Verwendung dieses Dienstprogramms findet sich in den Skripten, in denen wir mit TCP/UDP-Sockets umgehen müssen.
In diesem Artikel lernen wir den netcat-Befehl anhand einiger praktischer Beispiele kennen.
1. Netcat in einer Server-Client-Architektur
Das Netcat-Dienstprogramm kann im Servermodus auf einem bestimmten Port ausgeführt werden, der auf eingehende Verbindungen wartet.
$ nc -l 2389
Es kann auch im Client-Modus verwendet werden, indem versucht wird, eine Verbindung über den gerade geöffneten Port (2389) herzustellen
$ nc localhost 2389
Wenn wir nun einen Text auf der Client-Seite schreiben, erreicht er die Server-Seite. Hier ist der Beweis :
$ nc localhost 2389 HI, server
Auf dem Terminal, auf dem der Server läuft:
$ nc -l 2389 HI, server
Wir sehen also, dass das Netcat-Dienstprogramm in der Client-Server-Socket-Kommunikation verwendet werden kann.
2. Verwenden Sie Netcat zum Übertragen von Dateien
Das Dienstprogramm netcat kann auch zum Übertragen von Dateien verwendet werden. Angenommen, wir haben auf der Clientseite eine Datei mit dem Namen „testfile“, die Folgendes enthält:
$ cat testfile hello test
und serverseitig haben wir eine leere Datei „test“
Jetzt führen wir den Server als :
aus$ nc -l 2389 > test
und führen Sie den Client als :
auscat testfile | nc localhost 2389
Wenn wir nun die „test“-Datei am Serverende sehen, sehen wir:
$ cat test hello test
Wir sehen also, dass die Dateidaten vom Client zum Server übertragen wurden.
3. Netcat unterstützt Timeouts
Es gibt Fälle, in denen wir nicht möchten, dass eine Verbindung für immer offen bleibt. In diesem Fall können wir über den Schalter „-w“ das Timeout in einer Verbindung angeben. Nach den zusammen mit dem Flag -w angegebenen Sekunden wird die Verbindung zwischen Client und Server beendet.
Server :
nc -l 2389
Kunde :
$ nc -w 10 localhost 2389
Die obige Verbindung würde nach 10 Sekunden beendet.
HINWEIS:Verwenden Sie das Flag -w nicht mit dem Flag -l auf der Serverseite, da das Flag -w in diesem Fall keine Wirkung hat und die Verbindung daher für immer offen bleibt.
4. Netcat unterstützt IPV6-Konnektivität
Das Flag -4 oder -6 gibt an, dass das Netcat-Dienstprogramm welchen Adresstyp verwenden soll. -4 zwingt nc, die IPV4-Adresse zu verwenden, während -6 nc zwingt, die IPv6-Adresse zu verwenden.
Server :
$ nc -4 -l 2389
Kunde :
$ nc -4 localhost 2389
Wenn wir jetzt den Befehl netstat ausführen, sehen wir :
$ netstat | grep 2389 tcp 0 0 localhost:2389 localhost:50851 ESTABLISHED tcp 0 0 localhost:50851 localhost:2389 ESTABLISHED
Das erste Feld in der obigen Ausgabe würde ein Postfix „6“ enthalten, falls die IPv6-Adressen verwendet werden. Da dies in diesem Fall nicht der Fall ist, wird eine Verbindung zwischen Server und Client über IPV4-Adressen hergestellt.
Nun, wenn wir nc zwingen, IPv6-Adressen zu verwenden
Server :
$ nc -6 -l 2389
Kunde :
$ nc -6 localhost 2389
Wenn wir jetzt den Befehl netstat ausführen, sehen wir :
$ netstat | grep 2389 tcp6 0 0 localhost:2389 localhost:33234 ESTABLISHED tcp6 0 0 localhost:33234 localhost:2389 ESTABLISHED
Jetzt zeigt also ein Postfix „6“ mit „tcp“, dass nc jetzt IPV6-Adressen verwendet.
5. Deaktivieren Sie das Lesen von STDIN in Netcat
Diese Funktionalität kann mit dem Flag -d erreicht werden. Im folgenden Beispiel haben wir dieses Flag auf der Client-Seite verwendet.
Server :
$ nc -l 2389
Kunde :
$ nc -d localhost 2389 Hi
Der Text „Hi“ wird nicht an das Serverende gesendet, da mit der Option -d das Lesen von stdin deaktiviert wurde.
6. Netcat-Server zwingen, aktiv zu bleiben
Wenn der Netcat-Client mit dem Server verbunden ist und der Client nach einiger Zeit wieder getrennt wird, wird normalerweise auch der Netcat-Server beendet.
Server :
$ nc -l 2389
Kunde :
$ nc localhost 2389 ^C
Server :
$ nc -l 2389 $
Im obigen Beispiel sehen wir also, dass der Server beendet wurde, sobald der Client getrennt wurde.
Dieses Verhalten kann gesteuert werden, indem das Flag -k auf der Serverseite verwendet wird, um den Server zu zwingen, aktiv zu bleiben, selbst nachdem der Client die Verbindung getrennt hat.
Server :
$ nc -k -l 2389
Kunde :
$ nc localhost 2389 ^C
Server :
$ nc -k -l 2389
Wir sehen also, dass durch die Verwendung der Option -k der Server aktiv bleibt, selbst wenn die Verbindung zum Client getrennt wurde.
7. Netcat-Client so konfigurieren, dass er nach EOF aktiv bleibt
Der Netcat-Client kann so konfiguriert werden, dass er aktiv bleibt, nachdem EOF empfangen wurde. Wenn der nc-Client in einem normalen Szenario ein EOF-Zeichen empfängt, wird er sofort beendet, aber dieses Verhalten kann auch gesteuert werden, wenn das Flag -q verwendet wird. Dieses Flag erwartet eine Zahl, die die Anzahl der Sekunden angibt, die gewartet werden soll, bevor der Client beendet wird (nach dem Empfang von EOF)
Der Client sollte wie folgt gestartet werden:
nc -q 5 localhost 2389
Wenn der Client jetzt jemals ein EOF erhält, wartet er 5 Sekunden, bevor er beendet wird.
8. Verwenden Sie Netcat mit dem UDP-Protokoll
Standardmäßig sind alle Sockets, die das Dienstprogramm nc erstellt, TCP-Protokolle, aber dieses Dienstprogramm funktioniert auch mit dem UDP-Protokoll. Um das UDP-Protokoll zu aktivieren, wird das Flag -u verwendet.
Server :
$ nc -4 -u -l 2389
Kunde :
$ nc -4 -u localhost 2389
Jetzt sind sowohl der Server als auch der Client für die Verwendung des UDP-Protokolls konfiguriert. Dies kann durch den folgenden netstat-Befehl bestätigt werden. Wir sehen also, dass diese Verbindung jetzt das UDP-Protokoll verwendet.
$ netstat | grep 2389 udp 0 0 localhost:42634 localhost:2389 ESTABLISHED