W jaki sposób przeniesienie gniazda domeny unix umożliwia socat monitorowanie ruchu?

12

socat może być używany do monitorowania ruchu w gnieździe domeny Uniksa:

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

Nie do końca rozumiem, jak działa ten mechanizm, mając nadzieję, że ktoś może go trochę wyjaśnić. W szczególności, jak działa przenoszenie pliku gniazda, jeśli proces nasłuchuje? Również po ruchu: ani lsof /path/to/socknie /path/to/sock.originalzwraca żadnych wyników.

Matt R.
źródło

Odpowiedzi:

11

Te polecenia należy uruchomić, gdy serwer, który chcesz monitorować, nasłuchuje /path/to/sock. W takim przypadku zmiana nazwy /path/to/socknie wpłynie na serwer.

socatPolecenie wstawia man-in-the-middle. Nasłuchuje /path/to/socksi przekazuje cały ruch klientów do /path/to/socks.original(i loguje go w procesie za pomocą -v).

Działa to tylko w przypadku gniazd strumieniowych (użyj UNIX-RECVFROM/ UNIX-RECVdla gniazd datagramowych ) i tylko wtedy, gdy klienci korzystają tylko z read/write/send/recvtych gniazd, a nie sendmsg()z danymi pomocniczymi i innymi fantazyjnymi rzeczami.

lsofbędzie raportować tylko procesy nasłuchiwania ( socatoraz serwer nasłuchiwania i zaakceptowane gniazda). Zasadniczo nie można połączyć podłączonego gniazda na kliencie ze ścieżką gniazda.

Jeśli tak, że przed uruchomieniem serwera, to nie będzie działać jako serwer będzie starał się słuchać na /path/to/socksa nie jak socatjest już słuchać o tym. Lub /path/to/sock.originalzamiast tego musisz powiedzieć serwerowi, aby nasłuchiwał .

Stéphane Chazelas
źródło