Der Befehl netcat (kurz nc) liest und schreibt Daten über TCP- und UDP-Verbindungen. Das macht ihn zum Schweizer Taschenmesser der Netzwerk-Diagnose: Port-Scans, Dateiübertragungen, Verbindungstests und schnelle Debugging-Sessions erledigst du damit in Sekunden.

Auf den meisten Systemen ist netcat bereits vorinstalliert. Ubuntu und Debian liefern die OpenBSD-Variante aus, bei der sowohl nc als auch netcat funktionieren.

Syntax

nc [OPTIONEN] HOST PORT
  • HOST – Die Zieladresse (IP oder Hostname).
  • PORT – Der Zielport oder ein Portbereich (z.B. 20-80).

Standardmäßig baut nc eine TCP-Verbindung auf. Für UDP verwendest du die Option -u:

nc -u HOST PORT

Wichtige Optionen

OptionBeschreibung
-lListen-Modus: Wartet auf eingehende Verbindungen
-p PORTLokalen Quellport festlegen
-uUDP statt TCP verwenden
-vAusführliche Ausgabe (verbose)
-zNur scannen, keine Daten senden (zero I/O)
-w SEKUNDENTimeout für Verbindungen setzen
-nKeine DNS-Auflösung durchführen

Ports scannen

Mit nc prüfst du schnell, welche Ports auf einem Host offen sind. Die Option -z scannt ohne Datenübertragung, -v liefert detaillierte Ausgaben:

nc -z -v 192.168.1.10 20-80

Die Ausgabe zeigt erfolgreiche und fehlgeschlagene Verbindungen:

nc: connect to 192.168.1.10 port 20 (tcp) failed: Connection refused
nc: connect to 192.168.1.10 port 21 (tcp) failed: Connection refused
Connection to 192.168.1.10 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.1.10 port 23 (tcp) failed: Connection refused
...
Connection to 192.168.1.10 80 port [tcp/http] succeeded!

Nur offene Ports anzeigen:

nc -z -v 192.168.1.10 20-80 2>&1 | grep succeeded

Für UDP-Ports fügst du -u hinzu:

nc -z -v -u 192.168.1.10 53

Du kannst auch die Software-Version eines Dienstes abfragen. SSH-Server geben beim Verbinden ihren Banner aus:

echo "EXIT" | nc 192.168.1.10 22
SSH-2.0-OpenSSH_8.9p1 Ubuntu-3
Protocol mismatch.

Hinweis: Für umfangreiche Port-Scans ist nmap besser geeignet. nc reicht für schnelle Checks, aber nmap bietet Service-Erkennung, Versionserkennung und mehr.

Dateien übertragen

netcat überträgt Dateien direkt zwischen zwei Rechnern – ohne FTP, SCP oder andere Tools. Ein Rechner lauscht, der andere sendet.

Auf dem Empfänger (wartet auf Port 5555):

nc -l 5555 > empfangene_datei.tar.gz

Auf dem Sender (verbindet sich und sendet):

nc empfaenger.example.com 5555 < datei.tar.gz

Die Verbindung schließt automatisch nach der Übertragung. Bei manchen nc-Versionen musst du mit Strg+C beenden.

Verzeichnisse übertragen

Kombiniere nc mit tar, um ganze Verzeichnisse zu übertragen:

Auf dem Empfänger:

nc -l 5555 | tar xzvf -

Auf dem Sender:

tar czvf - /pfad/zum/verzeichnis | nc empfaenger.example.com 5555

Sicherheitshinweis: Diese Übertragung ist unverschlüsselt. Jeder im Netzwerkpfad kann die Daten mitlesen. Für sensible Daten nutze scp, rsync über SSH oder einen VPN-Tunnel.

Verbindungen testen

Mit nc testest du, ob ein Dienst erreichbar ist. Das ist nützlicher als ping, weil du den tatsächlichen Port prüfst:

nc -zv webserver.example.com 443
Connection to webserver.example.com 443 port [tcp/https] succeeded!

Mit Timeout für automatisierte Skripte:

nc -zv -w 3 webserver.example.com 443 || echo "Port nicht erreichbar"

Einfacher Chat

Für schnelle Tests oder zum Verständnis des Client-Server-Prinzips kannst du mit nc einen simplen Chat aufbauen:

Host A (lauscht):

nc -l 5555

Host B (verbindet):

nc hostA.example.com 5555

Jede Eingabe erscheint auf der Gegenseite. Beende mit Strg+C.

HTTP-Anfragen manuell senden

nc eignet sich zum Debuggen von HTTP-Verbindungen. Du siehst die rohe Kommunikation ohne Interpretation durch einen Browser oder curl:

printf "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n" | nc example.com 80

Die Ausgabe zeigt HTTP-Header und Response-Body im Rohformat.

Sicherheitshinweise

netcat ist ein mächtiges Werkzeug – und damit auch ein potenzielles Sicherheitsrisiko:

  • Offene Listener: Ein nc -l auf einem Server öffnet einen Port für jeden im Netzwerk. Nutze Firewalls, um den Zugriff einzuschränken.
  • Keine Verschlüsselung: Alle Daten fließen im Klartext. Für sensible Übertragungen nutze verschlüsselte Alternativen.
  • Pentesting-Einsatz: nc wird oft für Reverse Shells und andere Angriffstechniken verwendet. Auf Produktionssystemen sollte der Einsatz dokumentiert und überwacht werden.
  • Firewall-Umgehung: nc kann Daten über beliebige Ports tunneln. Das macht es für Angreifer attraktiv, aber auch für legitime Diagnosen nützlich.

Zusammenfassung

netcat ist ein unverzichtbares Diagnose-Tool für Netzwerkprobleme. Die wichtigsten Anwendungsfälle:

  • Port-Scan: nc -zv HOST PORT
  • Datei empfangen: nc -l PORT > datei
  • Datei senden: nc HOST PORT < datei
  • Verbindungstest: nc -zv -w 3 HOST PORT

Für die vollständige Optionsliste:

man nc