Das Dienstprogramm socat ist ein Relais für bidirektionale Datenübertragungen zwischen zwei unabhängigen Datenkanälen.
Es gibt viele verschiedene Arten von Kanälen socat
verbinden kann, einschließlich:
- Dateien
- Rohre
- Geräte (serielle Leitung, Pseudoterminal usw.)
- Sockets (UNIX, IP4, IP6 - roh, UDP, TCP)
- SSL-Sockets
- Proxy-CONNECT-Verbindungen
- Dateideskriptoren (stdin usw.)
- Der GNU-Zeileneditor (readline)
- Programme
- Kombinationen aus zwei davon
Dieses Tool gilt als erweiterte Version von netcat. Sie machen ähnliche Dinge, aber socat
verfügt über weitere zusätzliche Funktionen, wie z. B. das Erlauben mehrerer Clients, an einem Port zu lauschen, oder das Wiederverwenden von Verbindungen.
Warum brauchen wir socat?
Es gibt viele Möglichkeiten, socate
zu verwenden effektiv. Hier sind einige Beispiele:
- TCP-Portweiterleitung (One-Shot oder Daemon)
- Externer Sockenmacher
- Tool zum Angriff auf schwache Firewalls (Sicherheit und Audit)
- Shell-Schnittstelle zu Unix-Sockets
- IP6-Relais
- TCP-orientierte Programme auf eine serielle Leitung umleiten
- Serielle Leitungen auf verschiedenen Computern logisch verbinden
- Schaffen Sie eine relativ sichere Umgebung (
su
undchroot
) zum Ausführen von Client- oder Server-Shell-Skripten mit Netzwerkverbindungen
Wie verwenden wir socat?
Die Syntax für socat
ist ziemlich einfach:
socat [options] <address> <address>
Sie müssen die Quell- und Zieladressen angeben, damit es funktioniert. Die Syntax für diese Adressen lautet:
protocol:ip:port
Beispiele für die Verwendung von socat
Beginnen wir mit einigen grundlegenden Beispielen für die Verwendung von socat
für verschiedene Verbindungen.
1. Verbinden Sie sich mit TCP-Port 80 auf dem lokalen oder Remote-System:
# socat - TCP4:www.example.com:80
In diesem Fall socat
überträgt Daten zwischen STDIO (-) und einer TCP4-Verbindung zu Port 80 auf einem Host namens www.example.com.
2. Verwenden Sie socat
als TCP-Port-Weiterleitung:
Geben Sie für eine einzelne Verbindung Folgendes ein:
# socat TCP4-LISTEN:81 TCP4:192.168.1.10:80
Verwenden Sie für mehrere Verbindungen den fork
Option wie in den folgenden Beispielen verwendet:
# socat TCP4-LISTEN:81,fork,reuseaddr TCP4:TCP4:192.168.1.10:80
Dieses Beispiel lauscht auf Port 81, akzeptiert Verbindungen und leitet die Verbindungen an Port 80 auf dem Remote-Host weiter.
# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock
Das obige Beispiel lauscht auf Port 3307, akzeptiert Verbindungen und leitet die Verbindungen an einen Unix-Socket auf dem entfernten Host weiter.
3. Implementieren Sie einen einfachen netzwerkbasierten Nachrichtensammler:
# socat -u TCP4-LISTEN:3334,reuseaddr,fork OPEN:/tmp/test.log,creat,append
Wenn in diesem Beispiel ein Client eine Verbindung zu Port 3334 herstellt, wird ein neuer untergeordneter Prozess generiert. Alle von den Clients gesendeten Daten werden an die Datei /tmp/test.log
angehängt . Wenn die Datei nicht existiert, socat
schafft es. Die Option reuseaddr
ermöglicht einen sofortigen Neustart des Serverprozesses.
4. Senden Sie eine Rundsendung an das lokale Netzwerk:
# socat - UDP4-DATAGRAM:224.255.0.1:6666,bind=:6666,ip-add-membership=224.255.0.1:eth0
In diesem Fall socat
überträgt Daten von stdin
an die angegebene Multicast-Adresse mit UDP über Port 6666 für lokale und Remote-Verbindungen. Der Befehl weist auch die Schnittstelle eth0 an, Multicast-Pakete für die angegebene Gruppe zu akzeptieren.
Praktische Anwendungen für socat
Socat
ist ein großartiges Tool zur Fehlerbehebung. Es ist auch praktisch für die einfache Herstellung von Remote-Verbindungen. Praktischerweise habe ich socat
verwendet für entfernte MySQL-Verbindungen. Im folgenden Beispiel demonstriere ich, wie ich socat
verwende um meine Webanwendung mit einem Remote-MySQL-Server zu verbinden, indem ich eine Verbindung über den lokalen Socket herstelle.
1. Auf meinem entfernten MySQL-Server gebe ich ein:
# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock &
Dieser Befehl startet socat
und konfiguriert es so, dass es über Port 3307 lauscht.
2. Auf meinem Webserver gebe ich ein:
# socat UNIX-LISTEN:/var/lib/mysql/mysql.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 TCP:192.168.100.5:3307 &
Der obige Befehl stellt über Port 3307 eine Verbindung zum Remote-Server 192.168.100.5 her.
Die gesamte Kommunikation erfolgt jedoch über den Unix-Socket /var/lib/mysql/mysql.sock
, wodurch es wie ein lokaler Server aussieht.
Abschluss
socat
ist ein ausgeklügeltes Dienstprogramm und in der Tat ein hervorragendes Werkzeug für jeden Systemadministrator, um Dinge zu erledigen und Fehler zu beheben. Folgen Sie diesem Link, um weitere Beispiele für die Verwendung von socat zu lesen.
[ Kostenloser Online-Kurs:Technischer Überblick zu Red Hat Enterprise Linux. ]