Do przechwytywania / analizy ruchu sieciowego mamy narzędzie o nazwie Wireshark .
Czy mamy podobne narzędzie do przechwytywania całej komunikacji międzyprocesowej między dowolnymi dwoma procesami w systemach Unix / Linux?
Utworzyłem niektóre procesy w pamięci i muszę określić, w jaki sposób komunikują się ze sobą.
command-line
shell
process
ipc
Lazer
źródło
źródło
Odpowiedzi:
Zależy to w dużej mierze od mechanizmu komunikacji.
Na najbardziej przejrzystym końcu spektrum procesy mogą komunikować się za pomocą gniazd internetowych (tj. IP ). Następnie wireshark lub tcpdump może pokazać cały ruch, wskazując go na interfejs pętli zwrotnej.
Na poziomie pośrednim ruch na rurach i gniazdach unixowych można obserwować za pomocą
truss
/strace
/trace
/ ..., szwajcarskiej piły łańcuchowej śledzenia systemu. Może to jednak znacznie spowolnić procesy, więc może nie nadawać się do profilowania.Na najbardziej nieprzezroczystym końcu spektrum znajduje się pamięć współdzielona. Podstawowa zasada działania pamięci współużytkowanej polega na tym, że dostęp jest całkowicie przejrzysty w każdym zaangażowanym procesie, do skonfigurowania regionów pamięci współużytkowanej potrzebne są tylko wywołania systemowe. Śledzenie dostępu do pamięci z zewnątrz byłoby trudne, szczególnie jeśli potrzebujesz obserwacji, aby nie zakłócać pomiaru czasu. Możesz wypróbować narzędzia takie jak Linux trace toolkit (wymaga poprawki jądra) i sprawdzić, czy możesz wyodrębnić przydatne informacje; jest to obszar, w którym spodziewałbym się, że Solaris będzie miał lepsze narzędzie (ale nie mam o nim wiedzy).
Jeśli masz źródło, najlepszą opcją może być dodanie instrukcji śledzenia do kluczowych funkcji biblioteki. Można to osiągnąć za pomocą
LD_PRELOAD
lew, nawet jeśli nie masz (całego) źródła, o ile masz wystarczającą wiedzę na temat przepływu sterowania w części programu, która uzyskuje dostęp do pamięci współdzielonej.źródło
To pokaże, co proces czyta i zapisuje:
Nie jest to czysty wynik (pokazuje wiersze takie jak: write (#,)), ale działa! (i jest jednowierszowy: D) Możesz także nie lubić faktu, że argumenty są skrócone. Aby kontrolować ten parametr -s, który ustawia maksymalną długość wyświetlanych ciągów.
Łapie wszystkie strumienie, więc możesz to jakoś przefiltrować.
Możesz to przefiltrować:
pokazuje tylko wywołania deskryptora 1. 2> & 1 to przekierowanie stderr na stdout, ponieważ strace domyślnie zapisuje do stderr.
źródło