socat — Bidirektionale Netzwerk-Relays auf der Kommandozeile

Praxis-Guide zu socat — Netcat auf Steroiden: bidirektionale Relays für Portweiterleitung, Tunneling und Debugging über TCP, UDP, TLS und UNIX-Sockets.

socat ist das Netcat auf Steroiden: Es verbindet nicht nur TCP-Sockets, sondern beliebige Datenkanäle – TCP, UDP, UNIX-Sockets, Dateien, Pipes, serielle Schnittstellen und TLS-Verbindungen – bidirektional miteinander. Mit einem einzigen Befehl baust du Portweiterleitungen, TLS-Tunnel oder inetd-Dienste, kannst Protokolle im Klartext inspizieren und Daten zwischen Netzwerk-Sockets und lokalen Prozessen routen. Dieser Guide zeigt dir die wichtigsten socat-Muster für den Alltag.

TCP-Verbindungen

socat TCP-LISTEN:<port>,reuseaddr,fork - — Erstellt einen einfachen TCP-Server, der auf einem Port lauscht.

socat TCP-LISTEN:8080,reuseaddr,fork -

socat - TCP:<host>:<port> — Verbindet dich mit einem TCP-Server (wie netcat).

socat - TCP:localhost:8080

socat TCP-LISTEN:<port>,reuseaddr,fork TCP:<host>:<port> — TCP-Portweiterleitung (Proxy).

socat TCP-LISTEN:8080,reuseaddr,fork TCP:backend:3000

socat TCP-LISTEN:<port>,reuseaddr,fork,bind=<ip> TCP:<host>:<port> — Portweiterleitung an eine bestimmte Netzwerkschnittstelle gebunden.

socat TCP-LISTEN:8080,reuseaddr,fork,bind=127.0.0.1 TCP:remote:80

UDP & UNIX-Sockets

socat UDP-LISTEN:<port> - — Lauscht auf UDP-Pakete.

socat UDP-LISTEN:5000 -

socat - UDP:<host>:<port> — Sendet Daten per UDP.

echo 'test' | socat - UDP:localhost:5000

socat UNIX-LISTEN:<path>,fork TCP:<host>:<port> — Leitet einen UNIX-Socket auf eine TCP-Verbindung weiter.

socat UNIX-LISTEN:/tmp/myapp.sock,fork TCP:localhost:3306

socat TCP-LISTEN:<port>,fork UNIX:<path> — Macht einen UNIX-Socket über TCP erreichbar — exponiert den Docker-Daemon ungesichert; nur in lokalen/Test-Umgebungen, niemals öffentlich erreichbar.

socat TCP-LISTEN:2375,fork UNIX:/var/run/docker.sock

SSL/TLS

socat OPENSSL-LISTEN:<port>,cert=<cert>,key=<key>,fork TCP:<host>:<port> — SSL/TLS-Terminierungsproxy.

socat OPENSSL-LISTEN:443,cert=server.pem,key=server.key,reuseaddr,fork TCP:localhost:8080

socat - OPENSSL:<host>:<port> — Verbindet dich mit einem SSL/TLS-Server.

socat - OPENSSL:example.com:443

socat TCP-LISTEN:<port>,fork OPENSSL:<host>:<port> — Fügt einer unverschlüsselten Verbindung TLS hinzu.

socat TCP-LISTEN:3307,fork OPENSSL:db.example.com:3306

Dateiübertragung

socat TCP-LISTEN:<port> OPEN:<file>,creat — Empfängt eine Datei über TCP.

socat TCP-LISTEN:9999 OPEN:received.tar.gz,creat

socat OPEN:<file> TCP:<host>:<port> — Sendet eine Datei über TCP.

socat OPEN:backup.tar.gz TCP:remote:9999

socat EXEC:'tar czf - /data' TCP-LISTEN:<port> — Streamt ein tar-Archiv über das Netzwerk.

socat EXEC:'tar czf - /data' TCP-LISTEN:9999

socat TCP:<host>:<port> EXEC:'tar xzf -' — Empfängt einen tar-Stream und entpackt ihn.

socat TCP:remote:9999 EXEC:'tar xzf - -C /restore'

Debugging & Tests

socat -v TCP-LISTEN:<port>,fork TCP:<host>:<port> — Verbose-Proxy: zeigt alle durchlaufenden Daten an.

socat -v TCP-LISTEN:8080,fork TCP:api.example.com:80

socat -x TCP-LISTEN:<port>,fork TCP:<host>:<port> — Hex-Dump-Proxy: zeigt Daten als Hexadezimal.

socat -x TCP-LISTEN:8080,fork TCP:localhost:3000

socat READLINE TCP:<host>:<port> — Interaktive Verbindung mit Readline (Zeilenbearbeitung und History).

socat READLINE TCP:localhost:6379

socat /dev/null TCP:<host>:<port> — Schneller TCP-Konnektivitätstest.

socat /dev/null TCP:db.example.com:5432,connect-timeout=5

Typische Muster

socat TCP-LISTEN:<port>,reuseaddr,fork EXEC:<program> — Startet ein Programm für jede TCP-Verbindung (inetd-Stil).

socat TCP-LISTEN:8080,reuseaddr,fork EXEC:/usr/local/bin/handler.sh

socat PTY,link=<path>,raw,echo=0 TCP:<host>:<port> — Erstellt einen virtuellen seriellen Port über TCP.

socat PTY,link=/dev/vmodem,raw,echo=0 TCP:192.168.1.100:5000

socat TCP-LISTEN:<port>,reuseaddr,fork SYSTEM:'echo HTTP/1.1 200 OK; echo; echo Hello' — Schneller HTTP-Antwort-Server zum Testen.

socat TCP-LISTEN:8080,reuseaddr,fork SYSTEM:'echo HTTP/1.1 200 OK; echo; echo Hello World'

Fazit

socat deckt ein breites Spektrum ab, das kein anderes Kommandozeilen-Werkzeug allein schließt: Ob Portweiterleitung, TLS-Tunnel oder inetd-Dienst mit einer Zeile – es lohnt sich, die Adress-Syntax zu verinnerlichen. Für schnelle Verbindungstests bleibt netcat die einfachere Wahl; sobald du Protokoll-Transformationen oder TLS brauchst, greifst du zu socat.

Verwandte Kommandos

  • nc – einfache TCP/UDP-Verbindungen und schnelle Konnektivitätstests
  • ssh – sichere Tunnel und Remote-Portweiterleitung über SSH
  • tcpdump – Netzwerkverkehr mitschneiden und analysieren