Sniff gniazdo domeny UNIX


9

Wiem, że jakiś proces zapisuje do określonego gniazda domeny unix ( /var/run/asterisk/asterisk.ctl), ale nie znam pid nadawcy. Jak mogę dowiedzieć się, kto pisze do gniazda? Próbowałem z:

sudo lsof /var/run/asterisk/asterisk.ctl

ale wyświetla tylko właściciela gniazda. Chciałbym wiedzieć, kto pisze / czyta to gniazdo, a także chciałbym powąchać dane. czy to możliwe?

Odpowiedzi:


4

Krótkie odpowiedzi są przeczące i niełatwe.

W Linuksie lsof polega na /proc/net/unixpobieraniu informacji dotyczących gniazd domeny UNIX. Ten interfejs wyświetla listę wszystkich powiązanych gniazd, ale nie śledzi punktów końcowych. Więc można zobaczyć, jakie istnieją gniazda, ale nie można zobaczyć, co się do nich podłączone. Gdzieś ta informacja jest śledzona, musi być śledzona, inaczej połączenia gniazd nie będą działać. Nie znalazłem jeszcze żadnego mechanizmu do odzyskania informacji o połączeniu.

Pytanie wąchania jest nieco bardziej interesujące, ale nie mniej rozczarowujące. Mam na myśli to, że „niełatwo” to to, że nie ma żadnego haka, który mógłby się zakraść i odczytać te dane. Najbliższym analogiem jest użycie tcpdump lub Wireshark, z których oba używają libpcap do ciężkiego podnoszenia. Chociaż zarówno sieć (AF_INET), jak i domena UNIX (AF_UNIX) są tworzone przy użyciu socket()wywołania funkcji, oba służą connect()do łączenia się, używania read()i write()przetwarzania danych, są obsługiwane przez różne podsystemy jądra. Ma to niefortunny efekt uboczny, ponieważ libpcap nie jest przeznaczony do pracy z gniazdami domenowymi UNIX.

Problem ma nieco słabszą stronę. Spójrz na stronę podręcznika użytkownika dla recv(2). Jest to wywołanie systemowe niższego poziomu, które read()wykorzystuje. Istnieje flaga dla recv()tzw MSG_PEEK. Umożliwiłoby to wąchanie ruchu przechodzącego przez gniazdo domeny UNIX. Więc to jest jasna strona, ciemna strona jest taka, że ​​według mojej najlepszej wiedzy nie istnieje żadna bieżąca aplikacja zaprojektowana do tego celu. Więc patrzysz na wysiłek rozwojowy.

Naprawdę chciałbym, aby była ładna prosta odpowiedź F'YEAH na obie części twojego pytania.



4

Wiem, że to nie odpowiada na główne pytanie, ale znalazłem się tutaj, szukając po prostu wąchania komunikacji na gnieździe. Postanowiłem publikować posty dla takich jak ja. Oto jak to zrobiłem:

$> sudo socat -t100 -x -v UNIX-LISTEN: /var/run/php5-fpm.sock.socat,mode=777,reuseaddr,fork UNIX-CONNECT: /var/run/php5-fpm.sock

Możesz usunąć -x i po prostu zostawić -v dla komunikacji ascii. Mam nadzieję, że komuś pomoże.


działa doskonale
JSmyth,

-1

socat -t100 UNIX-LISTEN: /tmp/file.sock,mode=777,reuseaddr,fork STDOUT

Nie ma powielania danych wyjściowych, nie ma danych cyklicznych. Błąd poprzedniego komentarza „.sock.socat”


2
Chociaż może to być przydatne polecenie, dodaj wyjaśnienie / wyjaśnienie (a czym to się różni od tej odpowiedzi ?)
HBruijn

Przepraszam. Nie ma powielania danych wyjściowych, nie ma danych cyklicznych. Błąd poprzedniego komentarza „.sock.socat”
srvf
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.