nc

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Der Shell-Befehl nc (netcat) wird als "TCP/IP swiss army knife" bezeichnet.

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

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 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
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 der Logdatei eines Webservers 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

Ein gefälschter Telnet-Dämon.

# echo "Guck nicht so bescheuert, du DEPP!" | nc -vv -l -p 23 -q 1
listening on [any] 23 ...
$ telnet localhost 23
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Guck nicht so bescheuert, du DEPP
Connection closed by foreign host.