Daten im Netzwerk kopieren, E-Mails lesen, Portscans, einen Webserver aufsetzen – das alles und noch mehr erledigt Netcat, das Schweizer Taschenmesser unter den Netzwerktools.
Eine Aufgabe, ein Werkzeug – dieser Unix-Tradition folgt auch das Programm Netcat [1]: Es beschränkt sich auf seine Arbeit im Netzwerk, erledigt diese jedoch mit facettenreicher Konsequenz. Als ersten Beispiel dafür kann das einfache Kopieren zwischen zwei Rechnern dienen.
Hin und her
Nehmen wir an, Sie möchten eine Datei namens aus.txt, die auf dem Rechner mit dem Hostnamen erde liegt, auf den Rechner sonne kopieren. Dazu starten Sie auf sonne zunächst das Programm Netcat als ansprechbaren Server mit den Optionen -l für “listen” (dt: lausche) und -p 6000, wobei der Parameter -p den Port steht, auf dem Netcat lauscht. Eine Ausgabeumleitung mittels > ein.txt sorgt zudem dafür, dass Netcat die eingehenden Daten in die entsprechende Datei schreibt. In der Regel stehen ihnen die Aufrufe netcat und die Kurzform nc zur Verfügung, um das Tool in der Shell zu starten.
sonne:~$ nc -l -p 6000 > ein.txt
Auf erde genügen die Parameter sonne und 6000, um anhand von < Original.txt die Daten an Netcat zu verfüttern und an das Netcat auf sonne zu übergeben:
erde:~$ nc sonne 6000 < aus.txt
Nachdem Sie auf erde den obigen Befehl eingegeben haben, müssen Sie das Programm dort mit [Strg]+[C] abbrechen. Der Netcat-Server auf sonne beendet sich nach dem Schreiben der Datei ein.txt damit ebenfalls. Auf ähnliche Weise verfahren Sie beim Senden ganzer Verzeichnisinhalte:
sonne:~$ nc -l -p 6000 | tar x erde:~$ tar cf - * | nc sonne 6000
Damit verstauen Sie das aktuelle Arbeitsverzeichnis, in dem Sie sich in der Shell auf erde befinden, durch die Pipe | in einen Tarball, senden diesen an sonne und entpacken ihn dort.
Kommunikation
Was passiert, wenn Sie das Tool nicht mit Ein- und Ausgabeumleitungen arbeiten lassen oder den Output des Programms durch die Pipe an ein weiteres Werkzeug weiterleiten? Dann haben Sie einen kleinen Chat:
sonne:~$ nc -l -p 2000 erde:~$ nc sonne 2000
Alles, was die Benutzer der Rechner sonne und erde nun eintippen, kann man auch auf dem jeweils anderen Rechner lesen. Daneben können Sie mit Netcat auch interaktiv arbeiten, etwa, um die Anzahl und die Größe der Mails abzufragen, die im Postfach Ihres Providers für Sie bereitliegen:
sonne:~$ nc pop.gmx.net 110 user Benutzername pass Passwort list quit
Mit den Schlüsselwörtern user und pass authentifizieren Sie sich am Server pop.gmx.net. Das folgende Kommando list befiehlt dem POP-Server, die Größe aller Nachrichten anzuzeigen, die er für Sie bereithält. Der Befehl quit beendet die Verbindung zum Server. Auf ähnliche Weise verbinden Sie sich auch mit SMTP-, NNTP- oder FTP-Servern.
Unter der Lupe
Oft wissen Sie als Anwender nicht, welcher Rechner nun überhaupt einen Dienst anbietet. Für diesen Fall bietet Ihnen das Netcat seine Dienste als Portscanner an:
sonne:~$ nc -vz localhost 1-1024 localhost [127.0.0.1] 631 (ipp) open
Der Parameter -v sorgt hier für eine ausführlichere Ergebnisausgabe, -z (“zero-I/O mode”) versetzt Netcat in den Modus eines Portscanners. Wie Sie sehen, lauscht auf dem Rechner sonne am Port 631 wahrscheinlich ein Drucker-Daemon.
Statt Ports oder Port-Gruppen können Sie auch Protokolle angeben. So führt der Befehl nc -vz www.linux-user.de 21 zu der Erkenntnis, dass auf Port 21 des Rechnes www.linux-user.de ein FTP-Server läuft. Wie der dann in einem FTP-Client ausschaut, zeigt Abbildung 1.
Zu Diensten!
Allerdings bietet die Domain linux-user.de nicht nur einen FTP-Dienst, sondern auch den Web-Auftritt des Magazins – dies jedoch auf Port 80. Ein kleiner Einzeiler in der Shell genügt, um die Einstiegsseite in die Datei linuxuser.html zu kopieren und auf der Festplatte zu speichern:
$ echo -e "GET / HTTP/1.0\r\n" | nc www.linux-user.de 80 > linuxuser.html
Der Befehl echo -e "GET / HTTP/1.0\r\n" übergibt durch die Pipe | einen so genannten Request – diese Anfrage stellt sonst ein Webbrowser. Mit GET legen Sie unter anderem fest, welches Dokument auf dem Webserver abgefragt werden soll; hier ist es die Homepage (GET /).
Bei unserem Webseitenabruf lässt sich die Kommandoschraube sogar noch eine Umdrehung weiter ziehen: Statt die Ausgabe in eine Datei zu leiten, reicht der nc-Befehl sie via Pipe an einen zweiten durch:
$ echo -e "GET / HTTP/1.0\r\n" | nc www.linux-user.de 80 | nc -l -p 8080 -q 1
Wie Sie sich erinnern, startet Netcat mit den Optionen -l und -p im Server-Modus. Neu ist in obigem Beispiel lediglich der Parameter -q 1, der das Tool nach einer Sekunde beendet, wenn das Ende einer Datei erreicht wurde. An diesen Netcat-Webserver übergibt die erste Netcat-Instanz die Einstiegsseite von LinuxUser, sodass sich diese im Webbrowser nun auf Port 8080 betrachten lässt (Abbildung 2). In der Shell hingegen sehen Sie, sobald der Webbrowser Netcat kontaktiert, dessen Header-Daten, wie man sie unter anderem in den Logfiles von Webservern findet (Listing 1).

Abbildung 2: Die Einstiegsseite des LinuxUser-Webauftritts zeigt sich mit Netcat auf Port 8080 des Localhosts.
GET / HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9.0.11) Gecko/20080528 Epiphany/2.22 Firefox/3.0 […]
Daneben lässt sich Netcat mit etwas Grundlagenwissen der Shell-Programmierung dauerhaft als Webserver betreiben (so Sie das für sinnvoll erachten). Dazu packen sie das nc-Kommando als Körper in eine while-Endlosschleife:
while true; do; nc -l -p 8080 -q 1 < text.html; done
Auf diese Weise setzen Sie (Root-Rechte vorausgesetzt) auf den privilegierten Ports von 1 bis 1024 Honeypots, zu deutsch “Honigtöpfchen”, auf. So nennt man Dienste, die gar nicht existieren und deren Ports lediglich auf Anfragen reagieren, um potenzielle Eindringlinge aufzuspüren – oder, wie in Listing 2, mit einem gefälschten Telnet-Daemon zu ärgern.
sonne:~# echo " You are an IDIOT" | nc -vv -l -p 23 -q 1 sonne:~$ telnet localhost 23 Trying 127.0.0.1… Connected to localhost. Escape character is '^]'. You are an IDIOT Connection closed by foreign host.
Vorsicht geboten
So großzügig und flexibel Netcat seine Dienste gestalten mag, als brandgefährlich erweist sich das Tool bei unbedachtem Gebrauch für Ihr System. Der Parameter, der für mögliche Sicherheitsrisiken verantwortlich ist, lautet -e. Er steht für “execute” und bedeutet “ausführbar”. Alles, was ihm in der Kommandozeile folgt, startet Netcat, ohne mit der Wimper zu zucken – auch und gerade eine Shell:
sonne:~$ nc -v -l -p 6000 -e /bin/bash
Hier genügt nun das simple Kommando nc sonne 6000 von einem beliebigen anderen Rechner aus, um – ohne jede Passwortabfrage und Authentifizierung – eine Shell zur Fernsteuerung präsentiert zu bekommen. Es bedarf keiner großen Vorstellungskraft, um sich auszumalen, was passieren kann, wenn der Rechner sonne womöglich ohne Firewall mit dem Internet verbunden ist.
Zum Schluss noch ein weniger brisantes Beispiel. Da die Netzkatze so ziemlich alles futtert, was man ihr an Daten vorsetzt, kann man sie auch einsetzen, um Musikstücke übers Netzwerk zu streamen:
sonne:~$ nc -l -p 4321 -q 1 < furchtbar_lautes.mp3 erde:~$ nc sonne 4321 | mplayer -
Das klappt freilich nur mit einem Mediaplayer, der auf dem Client-Rechner erde von der Standardeingabe lesen kann – im Beispiel kommt der MPlayer zum Zug. Schon steht dem Hörgenuss nichts mehr im Weg.
… und mehr
Die hier gezeigten Anwendungsbeispiele streichen nur einen Teilbereich der Features ab, die Netcat bietet. Neben den genannten Punkten versteht sich das Programm außerdem auf das Um- und Weiterleiten von Ports, protokolliert den Netzwerkverkehr oder testet die Stabilität von Diensten. Detaillierte Netcat-Scripte finden Sie auf Ihrem System unter anderem in den Pfaden /usr/share/doc/netcat/examples und /usr/share/doc/netcat-traditional/examples, die Manpage erreichen Sie in der Shell mit dem Kommando man nc, respektive man netcat.
Fazit
Der Oldie Netcat erweist sich durch seine robuste Handhabung bereits mit nur einer Handvoll Optionen als gutes Werkzeug für die verschiedensten Aufgaben. Sollten Ihnen die Features der Software nicht genügen, gibt es inzwischen für den erweiterten Einsatz Socat [2] und für verschlüsselte Übertragung Cryptcat [3] als Alternativen. Beide Programme ähneln in Form und Bedienung Netcat, setzen jedoch unterschiedliche Schwerpunkte.
Infos
[1] GNU Netcat: http://netcat.sourceforge.net/
[2] Socat Homepage: http://www.dest-unreach.org/socat/
[3] Cryptcat Homepage: http://cryptcat.sourceforge.net/






