netcat (nc) — Das Schweizer Taschenmesser für TCP/IP
Praxis-Guide zu netcat (nc) — rohe TCP-/UDP-Verbindungen lesen und schreiben, Ports scannen, Dateien übertragen und Netzwerkdienste auf der Kommandozeile debuggen.
netcat (nc) ist das Schweizer Taschenmesser des TCP/IP-Stacks: Mit einem einzigen Kommando liest und schreibst du rohe Daten über TCP- und UDP-Verbindungen, scannst Ports, überträgst Dateien zwischen Rechnern und debuggst Netzwerkdienste direkt auf der Shell. Das Tool ist auf nahezu jedem Unix-System vorinstalliert und benötigt keine zusätzlichen Abhängigkeiten. Dieser Guide zeigt dir die wichtigsten nc-Optionen für legitime Admin- und Diagnose-Aufgaben – vom schnellen Port-Check bis zur komprimierten Dateiübertragung.
TCP-Verbindungen
nc <host> <port> — Verbindet sich mit einem TCP-Port.
nc example.com 80nc -v <host> <port> — Verbindet mit ausführlicher Ausgabe.
nc -v example.com 443nc -z <host> <port> — Port-Scan: prüft, ob ein Port offen ist (keine Daten werden gesendet).
nc -zv example.com 80nc -z <host> <start>-<end> — Scannt einen Port-Bereich.
nc -zv localhost 3000-3100nc -w <seconds> <host> <port> — Setzt einen Verbindungs-Timeout.
nc -w 5 -zv example.com 443Lauschen & Server
nc -l <port> — Lauscht auf einem TCP-Port (einfacher Server).
nc -l 8080nc -lk <port> — Lauscht und akzeptiert weiterhin Verbindungen (persistent).
nc -lk 8080nc -l <port> > <file> — Lauscht und speichert empfangene Daten in einer Datei.
nc -l 9999 > received.tar.gznc <host> <port> < <file> — Sendet eine Datei an ein lauschendes netcat.
nc 192.168.1.10 9999 < backup.tar.gzUDP
nc -u <host> <port> — Verbindet per UDP statt TCP.
nc -u localhost 5000nc -lu <port> — Lauscht auf UDP-Pakete.
nc -lu 5000echo '<data>' | nc -u <host> <port> — Sendet eine UDP-Nachricht.
echo 'test message' | nc -u localhost 5000HTTP & Tests
echo -e 'GET / HTTP/1.1\r\nHost: <host>\r\n\r\n' | nc <host> 80 — Sendet einen rohen HTTP-GET-Request.
echo -e 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80nc -l 8080 <<< 'HTTP/1.1 200 OK\r\n\r\nHello' — Erstellt einen minimalen Einmal-HTTP-Server.
while true; do echo -e 'HTTP/1.1 200 OK\r\n\r\nHello' | nc -l 8080; doneecho 'QUIT' | nc <host> 25 — Prüft, ob ein SMTP-Server antwortet.
echo 'QUIT' | nc -w 3 mail.example.com 25Dateiübertragung
nc -l <port> > <file> (receiver) — Empfängt eine Datei (auf der Zielmaschine ausführen).
nc -l 9999 > backup.tar.gznc <host> <port> < <file> (sender) — Sendet eine Datei (auf der Quellmaschine ausführen).
nc 192.168.1.10 9999 < backup.tar.gztar czf - <dir> | nc <host> <port> — Sendet ein Verzeichnis als komprimierten Stream.
tar czf - project/ | nc 192.168.1.10 9999nc -l <port> | tar xzf - — Empfängt und entpackt einen komprimierten Stream.
nc -l 9999 | tar xzf -Typische Anwendungsmuster
nc -zv <host> <port> 2>&1 | grep succeeded — Schneller Konnektivitäts-Check (skriptfreundlich).
nc -zv db.example.com 5432 2>&1 | grep succeedednc -l <port> -e /bin/bash — Bindet eine Shell an einen Port (nur für autorisierte Tests; nur netcat-traditional oder ncat; nicht im OpenBSD-nc).
nc -l 4444 -e /bin/bashnc -l <local-port> | nc <remote-host> <remote-port> — Einfacher TCP-Proxy / Relay.
nc -l 8080 | nc backend.local 3000echo -n | nc -w 1 <host> <port> && echo 'open' || echo 'closed' — Schneller Port-Check mit open/closed-Ausgabe.
echo -n | nc -w 1 localhost 3306 && echo 'MySQL open' || echo 'MySQL closed' Fazit
netcat bleibt unverzichtbar, weil es weder Abhängigkeiten noch besondere Rechte braucht: Ein einfaches nc-Kommando reicht für Port-Checks, schnelle Dateiübertragungen im LAN oder das Debuggen eines neuen Netzwerkdienstes. Wer komplexere Szenarien braucht – TLS, mehrere gleichzeitige Verbindungen oder Proxy-Funktionen – sollte socat als leistungsfähigere Alternative in Betracht ziehen.
Weiterführende Links
- Netcat – Wikipedia – Hintergrund und Geschichte
- nc(1) – Manpage – alle Optionen im Überblick (englisch)