mh.desing - stock.adobe.com

Netcat, Ncat, Socat: LAN-Diagnose, -Transfer, Weiterleitung

Die Tools Netcat, Ncat und Socat liefern schnelle Diagnosen im LAN: Ports prüfen, Streams mitschneiden, Verbindungen absichern und Daten ohne Zusatzdienste zuverlässig übertragen.

Das Übertragen von Daten und das Analysieren von Datenströmen gehört zu den täglichen Aufgaben eines Systemadministrators. Ob es darum geht, einen Port auf Erreichbarkeit zu prüfen, eine Datei ohne Zusatzdienste zwischen zwei Hosts zu kopieren, eine verschlüsselte Verbindung zu untersuchen oder einen temporären Proxy einzurichten, einfache Werkzeuge auf Kommandozeilenebene liefern oft schnellere Ergebnisse als komplexe Systeme.

Vielseitig zeigen sich in diesem Zusammenhang Netcat, Ncat und Socat. Sie ermöglichen bidirektionale Datenübertragung über TCP oder UDP, arbeiten wahlweise als Client oder Server und lassen sich ohne großen Aufwand in Skripte oder Diagnoseszenarien einbinden.

Die folgenden Abschnitte zeigen den praktischen Einsatz dieser Tools im Netz 10.0.0.0/16. Der Client 10.0.4.240 kommuniziert dabei mit dem Zielserver 10.0.0.1. Ergänzend kommen die Befehle ss zur Kontrolle von Sockets und tc zur Steuerung von Bandbreite und Warteschlangen zum Einsatz.

Die in diesem Beitrag vorgestellten Befehle und Beispiele beziehen sich auf Linux-Systeme. Netcat, Ncat und Socat sind jedoch auch unter Windows verfügbar. Ncat wird mit dem Nmap-Installer für Windows mitgeliefert. Netcat-Varianten stehen als eigenständige Binaries bereit und Socat ist über Umgebungen wie Cygwin oder MSYS2 nutzbar. Alternativ lässt sich unter Windows mit WSL eine Linux-Umgebung nutzen. Unter Linux erfolgt die Installation über die Paketverwaltung (etwa netcat-openbsd, nmap für ncat und socat), unter Windows über den Nmap-Installer oder die genannten Umgebungen. Prüfen Sie bei Downloads grundsätzlich Quelle und Signaturen.

Arbeitsprinzip und Zweck

Netcat und seine Derivate übertragen Daten, indem sie die Standardeingabe (stdin) und Standardausgabe (stdout) eines Prozesses an eine Netzwerkverbindung koppeln. In der einfachsten Form ersetzt das Werkzeug einen TCP- oder UDP-Socket und stellt damit eine direkte Leitung zwischen zwei Endpunkten her. Diese Struktur erlaubt es, beliebige Anwendungen über eine Netzverbindung zu verbinden oder Datenströme transparent zu beobachten.

Die Werkzeuge unterscheiden sich im Umfang ihrer Funktionen. Das klassische netcat (nc) ist auf Kernoperationen reduziert. Ncat, das als Teil des Nmap-Projekts entstanden ist, bietet zusätzlich SSL-Unterstützung, Proxy-Funktionen und Authentifizierung. Socat schließlich agiert als universeller Multiplexer, der nicht nur Sockets, sondern auch Dateien, Pipes, Unix-Sockets oder Pseudo-Terminals verbinden kann. Das eignet sich damit sowohl für komplexe Testaufbauten als auch für den dauerhaften Einsatz als Portweiterleiter oder TLS-Terminator.

Verbindungstest und Portscan

Bevor ein Administrator Netzwerkströme weiterleitet oder überträgt, steht meist die einfache Frage, ob ein Dienst überhaupt erreichbar ist. Netcat erlaubt sowohl den Aufbau einer Testverbindung als auch den gezielten Scan bestimmter Ports. Auf dem Zielserver wird zunächst ein Listener gestartet:

nc -l 12345

Der Parameter -l versetzt Netcat in den Listenmodus, in dem es eingehende TCP-Verbindungen an Port 12345 entgegennimmt. Diese Form des passiven Wartens entspricht dem Verhalten eines Servers. Der Client baut anschließend die Verbindung auf:

nc 10.0.0.1 12345

Sobald der Verbindungsaufbau erfolgreich ist, erscheinen eingegebene Zeichen auf beiden Terminals, eine einfache, aber verlässliche Methode, um die Erreichbarkeit eines Ports zu prüfen.

Netcat
Abbildung 1: Netcat für Verbindungstests nutzen.

Für den reinen Portscan ohne Datenaustausch kann man den Befehl um die Optionen -zv erweitern:

nc -zv 10.0.0.1 12345

-z bewirkt, dass Netcat keine Daten überträgt, sondern nur testet, ob eine Verbindung zustande kommt, während -v (verbose) detaillierte Rückmeldungen liefert. Bei UDP-Ports ergänzt man den Aufruf um die Option -u, um das Protokoll explizit zu wechseln.

Dateiübertragung über TCP

Ein häufiger Anwendungsfall ist die Übertragung von Dateien zwischen zwei Systemen ohne SSH oder NFS. Da Netcat alle Datenströme unverändert durchreicht, eignet es sich für einfache Kopieroperationen. Der Empfänger öffnet zunächst einen Listener und leitet den eingehenden Datenstrom direkt in eine Datei um:

nc -l 20000 > /tmp/empfang.bin

Der Client sendet die gewünschte Datei mit:

nc 10.0.0.1 20000 < /data/quelle.bin

Netcat liest die Datei über die Umleitung aus der Standard-Eingabe und überträgt sie unverändert an die Gegenstelle. Nach Abschluss der Übertragung beendet das Programm die Verbindung. Einige Implementierungen erfordern dafür den Parameter -N, der Netcat anweist, den Socket nach dem End-of-File zu schließen.

Auch komprimierte Archivströme lassen sich auf diese Weise übermitteln. Für ganze Verzeichnisse kombiniert man den Befehl mit tar und optional pv, um den Fortschritt anzuzeigen:

tar -czf - /srv/data | pv | nc -N 10.0.0.1 21000

Auf dem Zielserver wird der Strom wieder entpackt:

nc -l 21000 | tar -xzf - -C /srv/restored

Der gesamte Vorgang bleibt transparent und benötigt weder zusätzliche Dienste noch Authentifizierung, solange das Netz vertrauenswürdig ist.

Bidirektionale Kommunikation und Shellzugriff

Neben reinen Datenströmen lässt sich Netcat auch zum Aufbau von interaktiven Sitzungen einsetzen. Eine Bind Shell öffnet auf dem Zielsystem einen Port und verbindet ihn mit einer Kommandozeile. Der Administrator kann sich dann mit der entfernten Shell verbinden:

Zielsystem:

nc -l -p 4444 -e /bin/bash

Client:

nc 10.0.0.1 4444

Die Option -e führt das angegebene Programm, hier /bin/bash, aus und leitet dessen Ein- und Ausgabe über die Netzwerkverbindung. Diese Funktion ist in manchen Netcat-Versionen aus Sicherheitsgründen deaktiviert.

Umgekehrt kann eine Reverse Shell nützlich sein, wenn Firewalls eingehende Verbindungen blockieren, ausgehende aber erlauben. In diesem Fall lauscht der Administrator:

nc -l 4444

und der Zielhost baut die Verbindung aktiv auf:

nc 10.0.4.240 4444 -e /bin/bash

Für eine komfortablere Bedienung kann auf dem entfernten System ein Pseudo-Terminal erzeugt werden, etwa mit:

python -c 'import pty; pty.spawn("/bin/bash")'

Solche Verfahren sind ausschließlich in isolierten Testnetzen oder in kontrollierten Wartungsszenarien vertretbar, da sie weder Authentifizierung noch Verschlüsselung bieten.

Ncat: Erweiterter Funktionsumfang für verschlüsselte Verbindungen

Die Nmap-Implementierung Ncat erweitert Netcat um SSL-Unterstützung, Proxy-Funktionalität und Authentifizierung. Dadurch eignet sich das Werkzeug auch für die Fehlersuche in verschlüsselten Umgebungen oder als leichtgewichtiger Proxy.

Ein Beispiel für eine TLS-verschlüsselte Verbindung zwischen Client und Server lautet:

Zielserver:

ncat --ssl -l 8443

Client:

ncat --ssl 10.0.0.1 8443

Die Option --ssl aktiviert die TLS-Verschlüsselung. Der Verbindungsaufbau erfolgt bidirektional, die Daten werden transparent durchgereicht.

Ncat für Verbindungstests zwischen Geräten.
Abbildung 2: Ncat für Verbindungstests zwischen Geräten.

Darüber hinaus erlaubt Ncat den Betrieb als einfacher Proxy. Der folgende Befehl nimmt unverschlüsselte Verbindungen auf Port 8080 entgegen und leitet sie verschlüsselt an den Zielserver weiter. Gleichzeitig wird der Datenstrom in einer Datei protokolliert:

ncat -l 8080 --output /var/log/conn.log --sh-exec "ncat --ssl 10.0.0.1 8443"

Die Kombination aus --output und --sh-exec ermöglicht dabei die parallele Weiterleitung und Aufzeichnung, ein nützliches Verfahren für temporäre Debugging-Aufgaben.

Socat: Das universelle Relay

Für komplexere Anforderungen an Portweiterleitungen oder Protokollübersetzungen ist Socat die flexiblere Wahl. Das Tool kann nahezu jede denkbare Adresstypen miteinander verbinden: Dateien, Pipes, Unix-Sockets, PTYs oder Netzwerkverbindungen über TCP, UDP und OpenSSL. Eine typische Aufgabe ist das Umleiten eines Ports auf einen anderen Host. Auf 10.0.4.240 soll Port 8080 alle Anfragen an den internen Webdienst 10.0.0.1:80 weiterreichen:

socat TCP-LISTEN:8080,reuseaddr,fork TCP:10.0.0.1:80

Der erste Parameter definiert den Listener auf Port 8080. Die Optionen reuseaddr und fork erlauben das Wiederverwenden der Adresse nach einem Neustart und das gleichzeitige Akzeptieren mehrerer Verbindungen. Der zweite Parameter legt das Ziel fest, hier TCP-Verkehr an die Adresse 10.0.0.1 Port 80.

Für UDP-Weiterleitungen wird der Befehl entsprechend angepasst:

socat UDP-LISTEN:5353,reuseaddr,fork UDP:10.0.0.1:5353

Damit fungiert Socat als transparenter Proxy zwischen Client und Zielsystem.

Socat ergänzt sich mit netcat und ncat.
Abbildung 3: Socat ergänzt sich mit netcat und ncat.

TLS-Proxy und OpenSSL-Integration

Socat kann auch als TLS-Frontend dienen, um unverschlüsselte Anwendungen abzusichern. Wird beispielsweise ein Dienst auf 127.0.0.1:8080 betrieben, lässt er sich mit einem vorgelagerten TLS-Proxy im Netz verfügbar machen:

socat OPENSSL-LISTEN:443,reuseaddr,fork,cert=server.pem,cafile=client.crt TCP:127.0.0.1:8080

Dabei muss die Datei server.pem sowohl das Serverzertifikat als auch den privaten Schlüssel enthalten. Die angegebene CA-Datei muss existieren und im PEM-Format vorliegen. Vor dem Start ist sicherzustellen, dass der Benutzer, unter dem Socat läuft, Lesezugriff auf beide Dateien hat und die Zertifikate mit OpenSSL geprüft wurden. Der Prozess lauscht auf Port 443, authentifiziert sich mit dem Zertifikat server.pem und leitet eingehende TLS-Verbindungen an den unverschlüsselten lokalen Dienst weiter. Auf diese Weise können alte Anwendungen ohne native Verschlüsselung sicher über das Netz bereitgestellt werden.

Für den produktiven Einsatz empfiehlt sich eine Integration über systemd. Eine Service-Datei mit automatischem Neustart und beschränkten Benutzerrechten sorgt für Stabilität und Sicherheit:

[Unit]

Description=Socat Port Forwarding Service Port 8080

After=network.target

[Service]

ExecStart=/usr/bin/socat TCP-LISTEN:8080,reuseaddr,fork TCP:10.0.0.1:80

Restart=always

RestartSec=3s

User=nobody

Group=nogroup

[Install]

WantedBy=multi-user.target

Damit läuft die Weiterleitung dauerhaft im Hintergrund, ohne interaktive Sitzung.

Integration in Containernetzwerke und Namespaces

In virtualisierten Umgebungen oder Container-Szenarien lassen sich mit Netcat und Socat Netzwerkpfade nachvollziehen und gezielt beeinflussen. Zur Verbindung von Namespaces dient häufig ein virtuelles Ethernet-Paar:

ip link add veth-a type veth peer name veth-b

ip link set veth-b netns ns1

Innerhalb des Namespace ns1 kann veth-b anschließend mit einer eigenen Adresse konfiguriert werden:

ip netns exec ns1 ip addr add 10.0.10.2/24 dev veth-b

Auf dem Host bleibt veth-a mit der Adresse 10.0.10.1 aktiv. Mit Socat oder Ncat lassen sich Verbindungen über diese Schnittstellen herstellen oder Datenströme zwischen Host und Container prüfen. So können Administratoren Kommunikation und Isolationsgrenzen realistisch simulieren.

Performance-Tests mit tc und ss

Das Kommando tc (Traffic Control) ergänzt die Streaming-Tools, indem es Bandbreite, Latenz und Paketverhalten kontrolliert. Zur Simulation begrenzter Leitungen kann etwa eine Token-Bucket-Queue auf dem Interface eth0 eingerichtet werden:

tc qdisc add dev eth0 root tbf rate 2mbit burst 32kbit latency 400ms

So lässt sich die Auswirkung von Bandbreitenbeschränkungen auf laufende Netcat- oder Socat-Streams in Echtzeit beobachten.

ss liefert währenddessen eine Übersicht aller offenen Verbindungen und hilft beim Überwachen aktiver Sockets:

ss -tln

ss -uap

Die Kombination aus beiden Werkzeugen schafft eine präzise Kontrolle über das Verhalten von Streams und ermöglicht eine reproduzierbare Testumgebung.

ss zusammen mit netcat, ncat und socat nutzen.
Abbildung 4: ss zusammen mit netcat, ncat und socat nutzen.

Sicherheitsaspekte und bewährte Praxis

Da alle beschriebenen Werkzeuge in ihrer Standardkonfiguration unverschlüsselt arbeiten, sollten sie ausschließlich in abgeschotteten oder speziell gesicherten Netzbereichen eingesetzt werden. Für produktive Systeme empfiehlt sich immer eine TLS-Schicht oder der Betrieb innerhalb eines SSH-Tunnels. Reverse-Shells und ungesicherte Listener sind in Unternehmensnetzen nicht sinnvoll.

Die Protokollierung ist ebenso wichtig. Mitschnitte sollten über --output oder tee in rotierenden Logdateien abgelegt werden. Zertifikate für TLS-Listener werden regelmäßig geprüft und erneuert. Bei systemd-Diensten ist die Ausführung unter nicht-privilegierten Konten Pflicht, um Kompromittierungen zu vermeiden.

Fazit

Netcat, Ncat und Socat erlauben Tests, Datenübertragungen und Protokollanalysen mit wenigen Befehlen und ohne komplexe Abhängigkeiten. In Kombination mit Tools wie ss und tc entsteht ein vollständiger Werkzeugkasten zur Analyse, Weiterleitung und Simulation von Netzwerkverkehr. Ob einfache Verbindungstests, temporäre TLS-Proxys oder automatisierte Portweiterleitungen, die gezeigten Beispiele zeigen, dass sich viele Aufgaben mit einem klaren Verständnis der Kommandozeile schnell und kontrolliert lösen lassen.

Erfahren Sie mehr über Netzwerksoftware