Wie ermöglicht das Verschieben eines Unix-Domain-Sockets Socat die Überwachung des Datenverkehrs?

12

socat kann zum Überwachen des Datenverkehrs über einen Unix-Domain-Socket verwendet werden:

sudo mv /path/to/sock /path/to/sock.original
sudo socat -t100 -x -v UNIX-LISTEN:/path/to/sock,mode=777,reuseaddr,fork UNIX-CONNECT:/path/to/sock.original

Ich verstehe nicht ganz, wie dieser Mechanismus funktioniert, in der Hoffnung, jemand könnte es ein wenig erklären. Wie funktioniert das Verschieben der Socket-Datei, wenn sie bereits von einem Prozess abgehört wird? Auch nach dem Umzug: weder Ergebnisse lsof /path/to/socknoch /path/to/sock.originalRückgabe.

Matt R
quelle

Antworten:

11

Diese Befehle müssen ausgeführt werden, wenn der zu überwachende Server gerade empfangsbereit ist /path/to/sock. Wenn Sie dann umbenennen /path/to/sock, ist der Server nicht betroffen.

Der socatBefehl fügt einen Mann in der Mitte ein. Es lauscht /path/to/socksund leitet den gesamten Datenverkehr der Clients weiter /path/to/socks.original(und protokolliert ihn dabei mit -v).

Das funktioniert nur für Stream- Typen von Sockets (benutze UNIX-RECVFROM/ UNIX-RECVfür Datagramm- Sockets) und nur, wenn die Clients nur read/write/send/recvauf diese Sockets zugreifen, nicht sendmsg()mit Zusatzdaten und anderen ausgefallenen Dingen.

lsofmeldet nur die Abhörvorgänge ( socatund den Server für die abhörenden und akzeptierten Sockets). Im Allgemeinen ist es nicht möglich, einen verbundenen Socket auf dem Client mit dem Pfad des Sockets zu verknüpfen .

Wenn Sie das tun , bevor Sie den Server starten, dann das wird nicht funktionieren wie der Server wird versuchen , hören auf , /path/to/sockswie und nicht socatbereits auf das zu hören. Oder Sie müssen den Server anweisen, /path/to/sock.originalstattdessen zu lauschen .

Stéphane Chazelas
quelle