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:8080socat TCP-LISTEN:<port>,reuseaddr,fork TCP:<host>:<port> — TCP-Portweiterleitung (Proxy).
socat TCP-LISTEN:8080,reuseaddr,fork TCP:backend:3000socat 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:80UDP & 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:5000socat 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:3306socat 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.sockSSL/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:8080socat - OPENSSL:<host>:<port> — Verbindet dich mit einem SSL/TLS-Server.
socat - OPENSSL:example.com:443socat TCP-LISTEN:<port>,fork OPENSSL:<host>:<port> — Fügt einer unverschlüsselten Verbindung TLS hinzu.
socat TCP-LISTEN:3307,fork OPENSSL:db.example.com:3306Dateiübertragung
socat TCP-LISTEN:<port> OPEN:<file>,creat — Empfängt eine Datei über TCP.
socat TCP-LISTEN:9999 OPEN:received.tar.gz,creatsocat OPEN:<file> TCP:<host>:<port> — Sendet eine Datei über TCP.
socat OPEN:backup.tar.gz TCP:remote:9999socat EXEC:'tar czf - /data' TCP-LISTEN:<port> — Streamt ein tar-Archiv über das Netzwerk.
socat EXEC:'tar czf - /data' TCP-LISTEN:9999socat 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:80socat -x TCP-LISTEN:<port>,fork TCP:<host>:<port> — Hex-Dump-Proxy: zeigt Daten als Hexadezimal.
socat -x TCP-LISTEN:8080,fork TCP:localhost:3000socat READLINE TCP:<host>:<port> — Interaktive Verbindung mit Readline (Zeilenbearbeitung und History).
socat READLINE TCP:localhost:6379socat /dev/null TCP:<host>:<port> — Schneller TCP-Konnektivitätstest.
socat /dev/null TCP:db.example.com:5432,connect-timeout=5Typische 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.shsocat 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:5000socat 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.
Weiterführende Links
- socat – Wikipedia – Hintergrund und Einsatzgebiete (englisch)
- socat(1) – Manpage – alle Optionen im Überblick (englisch)