nc
Der Shell-Befehl nc (netcat) wird als "TCP/IP swiss army knife" bezeichnet. Es handelt sich dabei um ein Werkzeug zum Lesen von Netzwerkverbindungen und Schreiben auf solche, wobei TCP oder UDP verwendet werden.
Oft ist "netcat" ein symbolischer Link auf "nc".
Debian GNU/Linux 10.
$ ls -al /usr/bin/netcat lrwxrwxrwx 1 root root 24 Feb 13 22:27 /usr/bin/netcat -> /etc/alternatives/netcat $ ls -al /etc/alternatives/netcat lrwxrwxrwx 1 root root 19 Feb 13 22:27 /etc/alternatives/netcat -> /bin/nc.traditional
$ ls -al /usr/bin/nc lrwxrwxrwx 1 root root 20 Feb 13 22:27 /usr/bin/nc -> /etc/alternatives/nc $ ls -al /etc/alternatives/nc lrwxrwxrwx 1 root root 19 Feb 13 22:27 /etc/alternatives/nc -> /bin/nc.traditional $ ls -al /bin/nc.traditional -rwxr-xr-x 1 root root 27400 Apr 13 2017 /bin/nc.traditional
SUSE Linux Enterprise Server 15 SP1.
$ ls -al /usr/bin/netcat lrwxrwxrwx 1 root root 2 25. Mai 2018 /usr/bin/netcat -> nc $ ls -al /usr/bin/nc -rwxr-xr-x 1 root root 35912 25. Mai 2018 /usr/bin/nc
Optionen
Option | Beschreibung |
---|---|
-l | (listen) Start als Server. |
-p | (port) Port, auf dem nc als Server lauscht. |
-v | (verbose) Ausführliche Ausgabe. |
-z | (zero-I/O mode) Portscanner-Modus. |
Verwendung
Zu den Verwendungszwecken gehören neben den im Folgenden ausgeführten auch das Um- und Weiterleiten von Ports, die Protokollierung des Netzwerkverkehrs oder der Stabilitätstest von Netzdiensten.
Sehr ausführliche nc-Skripte finden sich unter anderem unter "/usr/share/doc/netcat-traditional/examples".
Kopieren einer Datei
Kopieren der Datei "eingabe.txt" vom Rechner "emu" zum Rechner "uhu". Dazu wird auf Rechner "uhu" nc als Server ("-l") auf Port 6000 ("-p 6000") gestartet. Eine Ausgabeumleitung sorgt dafür dass nc die Daten in die Datei "ausgabe.txt" schreibt. Auf Rechner "emu" genügen dann die Parameter "uhu" und "6000", um mit "< eingabe.txt" die Datei "eingebae.txt" an den Rechner "uhu" zu übergeben. Nach Eingabe des Befehls auf Rechner "emu" muss der Befehl mit "CTRL+C" abgebrochen werden, der nc-Server auf Rechner "uhu" beendet sich damit ebenfalls.
uhu:~$ nc -l -p 6000 > ausgabe.txt emu:~$ nc uhu 6000 < eingabe.txt CTRL+C
Kopieren eines Verzeichnisses
Das aktuelle Verzeichnis auf Rechner "emu" wird durch die Pipe "|" in einen Tarball gepackt, an den Rechner "uhu" geschickt und dort entpackt.
uhu:~$ nc -l -p 6000 | tar x emu:~$ tar cf - * | nc uhu 6000 CTRL+C
Postfach abfragen
Abfrage der Mails eines Postfachs über das Post Office Protocol.
$ nc pop.abc.xx 110 user Benutzername pass Passwort list quit
In entsprechender Weise können auch Verbindungen zu SMTP-, NNTP- oder FTP-Servern hergestellt werden.
Portscanner
Anzeige zu den Ports 80 und 443 auf dem lokalen Rechner.
$ for port in 80 443; do nc -zv localhost ${port}; done localhost [127.0.0.1] 80 (http) open localhost [127.0.0.1] 443 (https) : Connection refused
Achtung: Je nach Implementation von nc kann die Ausgabe auch wie folgt lauten.
Connection to localhost 80 port [tcp/http] succeeded! nc: connect to localhost port 443 (tcp) failed: Connection refused |
Anzeige der auf dem lokalen Rechner "localhost" zwischen Port 1 und 1024 laufenden Dienste. Der Parameter "-v" sorgt für eine ausführliche Ausgabe, "-z" versetzt nc in den Portscanner-Modus.
$ nc -vz localhost 1-1024 | grep succeeded localhost [127.0.0.1] 631 (ipp) open localhost [127.0.0.1] 80 (www) open localhost [127.0.0.1] 25 (smtp) open localhost [127.0.0.1] 22 (ssh) open
Anzeige des Ports auf dem lokalen Rechner, auf dem ein SMTP-Server läuft.
$ nc -vz localhost smtp localhost [127.0.0.1] 25 (smtp) open
Kommunikation mit Diensten
Kopieren der Einstiegsseite des WWW-Servers vom Rechner "www.linux-user.de" ins lokale Verzeichnis unter dem Namen "linuxuser.html". Dabei wird mit "echo -e" der sogenannte REQUEST durch die Pipe "|" an nc übergeben - diese Anfrage stellt normalerweise ein Webbrowser.
$ echo -e "GET / HTTP/1.0\r\n" | nc www.linux-user.de 80 > linuxuser.html
Die Einstiegsseite des WWW-Servers vom Rechner "www.linux-user.de" wird auf dem lokalen Rechner unter Port 8080 zur Verfügung gestellt und kann dort mit dem Webbrowser ("http://localhost:8080/") angesehen werden. Der Parameter "-q 1" beendet nc nach einer Sekunde, wenn das Ende der Datei erreicht wurde. Auf der Shell sind dabei die Header-Daten zu sehen, wie sie beispielsweise auch in einer Webserver-Protokolldatei zu sehen sind.
$ echo -e "GET / HTTP/1.0\r\n" | nc www.linux-user.de 80 | nc -l -p 8080 -q 1 GET / HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.18) Gecko/2010021501 Ubuntu/8.04 (hardy) Firefox/3.0.18 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de-ch,de-de;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: wikidbUserID=3; wikidbUserName=Mik; wikidb_session=6685748448b46dd92656d3b5c3b0c78d
Honeypot
Als Benutzer "root" können auf den privilegierten Ports 1 bis 1024 sogenannte Honeypots eingerichtet werden, also Dienste. die gar nicht existieren und deren Ports lediglich reagieren, um mögliche Eindringlinge aufzuspüren oder sich über sie lustig zu machen.
Ein gefälschter Telnet-Dämon, um Möchtegern-Cracker zu ärgern.
# echo "you are an IDIOT" | nc -l 23
# echo "you are an IDIOT" | netcat -l -p 23
$ telnet localhost 23 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. you are an IDIOT Connection closed by foreign host.
MP3-Stücke streamen
nc nimmt so ziemlich alles entgegen, was ihm vorgesetzt wird, also auch MP3-Dateien. Das Beispiel funktioniert allerdings nur mit einem Medienspieler (wie mplayer), der von der Standardeingabe lesen kann.
uhu:~$ nc -l -p 4321 -q 1 < musik.mp3 emu:~$ nc uhu 4321 | mplayer -
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | eng | netcatwbm | Enzyklopädischer Artikel |