Netcat (nc) ist ein vielseitiges Netzwerk-Tool für TCP und UDP Verbindungen. Es eignet sich für Port-Tests, Datentransfer, Debugging und mehr.
Installation
# Debian/Ubuntu (GNU netcat)
apt install netcat-openbsd
# Oder (traditionell)
apt install netcat-traditional
# RHEL/CentOS (nmap-ncat)
dnf install nmap-ncat
# Version prüfen
nc -hVarianten
| Variante | Paket | Besonderheiten | |----------|-------|----------------| | OpenBSD | netcat-openbsd | -e deaktiviert (Sicherheit) | | Traditional | netcat-traditional | -e verfügbar | | Ncat | nmap-ncat | SSL-Support, Teil von nmap |
Grundlagen
Verbindung aufbauen
# TCP-Verbindung zu Server
nc host.example.de 80
# UDP-Verbindung
nc -u host.example.de 53Listener starten
# TCP-Listener auf Port 1234
nc -l 1234
# Mit spezifischem Port (ncat)
nc -l -p 1234
# UDP-Listener
nc -ul 1234Port-Tests
Einzelner Port
# Port-Test
nc -zv host.example.de 80
# Ausgabe:
# Connection to host.example.de 80 port [tcp/http] succeeded!
# Mit Timeout
nc -zv -w 3 host.example.de 80Port-Range
# Port-Scan (TCP)
nc -zv host.example.de 20-25
# Schneller Scan
nc -zv -w 1 host.example.de 1-1000 2>&1 | grep succeededService-Banner
# Banner grabbing
echo "" | nc -v host.example.de 22
# HTTP-Banner
echo -e "HEAD / HTTP/1.0\r\n\r\n" | nc host.example.de 80Datentransfer
Datei übertragen
# Empfänger (Listener)
nc -l 1234 > empfangene_datei.txt
# Sender
nc host.example.de 1234 < datei.txt
# Mit Fortschritt (pv)
pv datei.txt | nc host.example.de 1234Verzeichnis übertragen
# Empfänger
nc -l 1234 | tar xzf -
# Sender
tar czf - verzeichnis/ | nc host.example.de 1234Disk-Image übertragen
# Empfänger
nc -l 1234 | dd of=/dev/sdb bs=1M
# Sender
dd if=/dev/sda bs=1M | nc host.example.de 1234Chat
Einfacher Chat
# Server
nc -l 1234
# Client
nc host.example.de 1234
# Beide können nun Nachrichten austauschenHTTP-Requests
GET-Request
# Manueller HTTP-Request
echo -e "GET / HTTP/1.1\r\nHost: example.de\r\n\r\n" | nc example.de 80
# Oder interaktiv
nc example.de 80
GET / HTTP/1.1
Host: example.de
[Enter][Enter]Einfacher Webserver
# Einmalige Antwort
echo -e "HTTP/1.1 200 OK\r\n\r\nHello World" | nc -l 8080
# Loop (mehrere Anfragen)
while true; do echo -e "HTTP/1.1 200 OK\r\n\r\n$(date)" | nc -l 8080; doneProxy und Relay
Port-Forwarding
# Mit Named Pipe
mkfifo /tmp/fifo
nc -l 8080 < /tmp/fifo | nc remote.example.de 80 > /tmp/fifo
# Mit ncat (einfacher)
ncat -l 8080 --sh-exec "ncat remote.example.de 80"Einfacher Proxy
# HTTP-Proxy Simulation
while true; do
nc -l 8080 | tee request.txt | nc target.example.de 80 | tee response.txt
doneNcat (nmap-Version)
SSL-Verbindung
# SSL-Client
ncat --ssl host.example.de 443
# SSL-Server
ncat --ssl -l 8443 --ssl-cert cert.pem --ssl-key key.pemExec-Modus
# Command ausführen bei Verbindung
ncat -l 1234 --exec "/bin/bash"
# Shell-Modus (interaktiv)
ncat -l 1234 --sh-exec "cat /etc/passwd"Access Control
# Nur bestimmte IPs erlauben
ncat -l 1234 --allow 192.168.1.0/24
# IPs blockieren
ncat -l 1234 --deny 10.0.0.0/8Keep-Alive
# Listener bleibt aktiv
ncat -l 1234 --keep-open
# Mit Verbindungslimit
ncat -l 1234 --max-conns 10Debugging
Verbindungs-Details
# Verbose
nc -v host.example.de 80
# Sehr verbose
nc -vv host.example.de 80Timeout
# Verbindungs-Timeout
nc -w 5 host.example.de 80
# Idle-Timeout
nc -i 30 host.example.de 80Source-IP/Port
# Source-IP binden
nc -s 192.168.1.10 host.example.de 80
# Source-Port
nc -p 12345 host.example.de 80Praktische Beispiele
Service-Verfügbarkeit prüfen
#!/bin/bash
# check-service.sh
HOST=$1
PORT=$2
if nc -z -w 2 $HOST $PORT; then
echo "Service $HOST:$PORT ist erreichbar"
exit 0
else
echo "Service $HOST:$PORT ist NICHT erreichbar"
exit 1
fiBackup über Netzwerk
# Empfänger-Server
nc -l 9999 | gzip -d | tar xf -
# Sender
tar cf - /wichtige/daten | gzip | nc backup-server 9999Load-Balancer Test
# Mehrere Requests
for i in {1..10}; do
echo -e "GET / HTTP/1.1\r\nHost: lb.example.de\r\n\r\n" | nc lb.example.de 80 | head -1
doneLatenz messen
# Zeit für Verbindungsaufbau
time nc -z host.example.de 80Sicherheitshinweise
# NIEMALS im Internet:
# nc -l -e /bin/bash # Backdoor!
# Stattdessen mit SSL und Auth (ncat)
ncat --ssl -l 1234 --ssl-cert server.crt --ssl-key server.key \
--allow 192.168.1.0/24 --exec "/bin/bash"Zusammenfassung
| Option | Beschreibung | |--------|--------------| | -l | Listen-Modus | | -p | Port | | -u | UDP | | -z | Zero-I/O (Port-Scan) | | -v | Verbose | | -w | Timeout | | -n | Keine DNS-Auflösung | | -s | Source-IP | | -e | Command ausführen (traditional) |
| Ncat-Option | Beschreibung | |-------------|--------------| | --ssl | SSL aktivieren | | --exec | Command bei Verbindung | | --allow | IP-Whitelist | | --keep-open | Listener bleibt aktiv |
| Anwendung | Beispiel | |-----------|----------| | Port-Test | nc -zv host 80 | | Dateitransfer | nc -l 1234 > file | | Banner | nc -v host 22 | | HTTP-Request | echo "GET /" \| nc host 80 |
Fazit
Netcat ist ein unverzichtbares Tool für Netzwerk-Debugging. Die Einfachheit macht es ideal für schnelle Tests. Für produktive Setups ist ncat mit SSL-Support empfohlen. Vorsicht bei exec-Features aus Sicherheitsgründen. Für komplexere Aufgaben sind spezialisierte Tools besser geeignet.