nc

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

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