Krótkie odpowiedzi są przeczące i niełatwe.
W Linuksie lsof polega na /proc/net/unix
pobieraniu 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.
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”
źródło