Chciałbym monitorować odpowiedzi na gnieździe unixowym bez zakłócania oryginalnych połączeń i przesyłać je do skryptu w celu przetworzenia.
Wiem, jak to zrobić za pomocą tcpdump dla połączeń tcp, ale nie mogę znaleźć rozwiązania dla lokalnych gniazd unixowych.
Czy to w ogóle możliwe?
Odpowiedzi:
Jest facet, który twierdzi, że to robi, tworząc aplikację, która działa jako brama między dwoma gniazdami i rejestruje wszystkie przepływające dane. Więc nie możesz dotknąć gniazda, ale jeśli możesz ponownie uruchomić usługę i dostroić ją, aby korzystać z tej aplikacji dla faceta, będziesz w stanie zobaczyć cały ruch.
Oto link do postu: Unix Socket Sniffer
Jest inny sposób, w którym musisz znaleźć identyfikator procesu dołączony do gniazda, a następnie znaleźć za pomocą lsof deskryptora pliku gniazda, a następnie dotknąć deskryptora pliku za pomocą strace.
Jeśli możesz zatrzymać cokolwiek klient / serwer używa gniazda i zmienić jego konfigurację, zalecałbym zawsze pierwszą metodę, druga metoda jest trudna i wymaga dotknięcia bieżącego procesu, który w niektórych aplikacjach może spowodować awarię.
Mam nadzieję, że ktoś nas oświeci w inny sposób :)
Powodzenia
źródło
możesz użyć socat.
Co się dzieje powyżej: Najpierw przenieś oryginalne gniazdo do sock.original. Socat tworzy nowe gniazdo („UNIX-LISTEN”) w lokalizacji oryginałów i przekazuje je wszystkie do oryginału („UNIX-connect”). Opcja -v mówi socatowi, aby wydrukował również dane wyjściowe do STDERR.
źródło
Możesz także spróbować użyć strace na jednym z procesów po obu stronach gniazda, ponieważ pozwoli ci to zobaczyć, co jest napisane / przeczytane. Znalazłem w moim środowisku produkcyjnym, nie mam towarzystwa, ale mam stratę.
W dowolnym przydatnym celu należy ustawić -s na coś dużego.
źródło
strace -p <pid>
do oglądania uruchomionego procesu.strace -s9999 -f $(for i in $( pidof php5-fpm ) ; do echo -n " -p $i "; done ) 2>&1 | tee /tmp/php.log
a następnie uruchom testy. Masz plik /tmp/php.log, aby powoli sprawdzać, czy dziennik jest zbyt duży. Jeśli otrzymujesz zbyt duży ruch, zrób zapytanie z ciągiem zapytania ze swoim imieniem lub czymś, aby wyszukać go w dziennikachprintf
sobie na powtórzenie.printf " -p %s" $(pidof php5-fpm)
poprzedzi każdy argument pid znakiem-p
i jest o wiele bardziej praktyczny do napisania.następnie:
źródło