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 -h

Varianten

| 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 53

Listener starten

# TCP-Listener auf Port 1234
nc -l 1234

# Mit spezifischem Port (ncat)
nc -l -p 1234

# UDP-Listener
nc -ul 1234

Port-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 80

Port-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 succeeded

Service-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 80

Datentransfer

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 1234

Verzeichnis übertragen

# Empfänger
nc -l 1234 | tar xzf -

# Sender
tar czf - verzeichnis/ | nc host.example.de 1234

Disk-Image übertragen

# Empfänger
nc -l 1234 | dd of=/dev/sdb bs=1M

# Sender
dd if=/dev/sda bs=1M | nc host.example.de 1234

Chat

Einfacher Chat

# Server
nc -l 1234

# Client
nc host.example.de 1234

# Beide können nun Nachrichten austauschen

HTTP-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; done

Proxy 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
done

Ncat (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.pem

Exec-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/8

Keep-Alive

# Listener bleibt aktiv
ncat -l 1234 --keep-open

# Mit Verbindungslimit
ncat -l 1234 --max-conns 10

Debugging

Verbindungs-Details

# Verbose
nc -v host.example.de 80

# Sehr verbose
nc -vv host.example.de 80

Timeout

# Verbindungs-Timeout
nc -w 5 host.example.de 80

# Idle-Timeout
nc -i 30 host.example.de 80

Source-IP/Port

# Source-IP binden
nc -s 192.168.1.10 host.example.de 80

# Source-Port
nc -p 12345 host.example.de 80

Praktische 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
fi

Backup über Netzwerk

# Empfänger-Server
nc -l 9999 | gzip -d | tar xf -

# Sender
tar cf - /wichtige/daten | gzip | nc backup-server 9999

Load-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
done

Latenz messen

# Zeit für Verbindungsaufbau
time nc -z host.example.de 80

Sicherheitshinweise

# 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.