W chwili pisania tego tekstu Wireshark nadal nie obsługuje tej funkcji; jednakże możesz śledzić jego postęp (jeśli taki istnieje) w [bug 1184] [1]. [1]: bugs.wireshark.org/bugzilla/show_bug.cgi?id=1184
Christopher Maynard
Odpowiedzi:
58
Nie wiem jak. PID nie pojawia się na kablu (ogólnie rzecz biorąc), a Wireshark pozwala spojrzeć na to, co jest na kablu - potencjalnie wszystkie maszyny, które komunikują się przez kabel. W każdym razie identyfikatory procesów nie są unikalne na różnych komputerach.
dobra uwaga… tak też myślałem… pozwól mi poczekać dzień przed zamknięciem tego, na wypadek gdyby był tam ninja wireshark, któremu udało się to zrobić ..
Ryan Fernandes
30
Wireshark wie, który port jest używany, a system operacyjny zna PID procesu, który używa tego portu. Po zmianie kodu Wireshark powinien mieć możliwość mapowania portu na PID. W niektórych przypadkach może się to nie powieść, na przykład gdy system operacyjny ponownie przydziela port do innej aplikacji tuż przed tym, jak Wireshark zapyta system operacyjny o PID dla portu. Więc to nie będzie niezawodne i odporne na usterki, ale jeśli użytkownik zostanie poinformowany o tych ograniczeniach, nadal będzie to przydatna funkcja.
Dojo
Mówię, że po prostu dodaj moduł do wireshark, który nasłuchuje otwierania / zamykania portów i mapuje PID na port. Zsynchronizuj to z głównym procesem, a otrzymasz doskonały mapper portu do procesu. Jednak czytając błąd z komentarza do pytania, moduł nie jest tak prosty w tworzeniu.
Vesper
Pamiętam, że kiedy po raz pierwszy pobrałem wireshark, pokazał drzewo procesów i można było wybrać proces do monitorowania. Nie wiem, kiedy ta opcja zniknęła, ale była.
Tomáš Zato - Przywróć Monikę
90
Na wypadek, gdybyś szukał alternatywnego sposobu, a środowiskiem, którego używasz, jest Windows, dobrym wyborem jest Microsoft Network Monitor 3.3. Zawiera kolumnę z nazwą procesu. Z łatwością dodasz go do filtra za pomocą menu kontekstowego i zastosujesz filtr .. Jak zwykle GUI jest bardzo intuicyjne ...
Jest też Microsoft Message Analyzer, który jest w zasadzie wersją Wiresharka Microsoftu (i następcą Monitora sieci, jak rozumiem), ale trochę lepiej zintegrowany. W selektorze kolumn pod „Etw” -> „EtwProviderMsg” znajduje się kolumna „PID”. To dobrze działa!
Cameron
3
Dokładna ścieżka to EtwProviderMsg -> EventRecord -> Header -> ProcessId
r590
Właśnie go wypróbowałem i że Microsoft Message Analyzer to taki nudny program! Prawie spowodowałem, że mój system przeszedł do indeksowania. Bardzo sprzeczny z intuicją interfejs użytkownika. Czy ktoś znalazł sposób na wyczyszczenie listy z zebranymi danymi? Poddałem się i usunąłem ten śmieć. (PS. Szkoda, że twórcy Wireshark nie dodali funkcji łączenia PID / nazwy procesu z portem w filtrze. Jest to bardzo łatwe. Może to być krytyczne, aby zobaczyć, co się dzieje podczas jego uruchamiania. obejście, które mogłem uzyskać ogólny pomysł za pomocą ProcMon z SysInternals.)
c00000fd
1
Niedawno odkryłem Microsoft Message Analyzer i jest to bardzo przydatne narzędzie! Jak to możliwe, że nigdy o tym nie słyszałem. Tak niedoceniany. Ma świetne możliwości filtrowania dzięki znacznie lepszej integracji z Windows niż Wireshark. Przełączam się na to na wszystkich hostach mojej firmy w ciągu ~ 3 miesięcy codziennej pracy. Ogromne uznanie dla @Cameron za komentarz pod tą odpowiedzią! :-)
Skipper
16
Możesz dopasować numery portów od wireshark do numerów portów od, powiedzmy, netstat, który powie ci PID procesu nasłuchującego na tym porcie.
Dzięki, że wskazałeś mi kierunek, właśnie tego potrzebowałem. FWIW, grupa najwyższego poziomu „ProcMon” wydaje się zawierać ten sam ProcessId, a także inne informacje, takie jak nazwa procesu, ParentId itp.
To robi w Wireshark, "Możesz dopasować numery portów od wireshark do numerów portów, powiedzmy, netstat, który powie ci PID procesu nasłuchującego na tym porcie". rzeczy z komentarza Toma Woolfreya, więc jest on (jak zauważa wiadomość) podlega ograniczeniom tego mechanizmu.
3
Jest to ważna rzecz, którą można zrobić, aby monitorować, gdzie pewne procesy próbują się połączyć, i wydaje się, że nie ma na to żadnego wygodnego sposobu na Linuksie. Jednak możliwych jest kilka obejść, dlatego uważam, że warto o nich wspomnieć.
Istnieje program o nazwie nonet, który umożliwia uruchamianie programu bez dostępu do Internetu (mam w systemie skonfigurowaną większość programów uruchamiających). Używa setguid do uruchamiania procesu w grupie nonet i ustawia iptables regułę aby odrzucać wszystkie połączenia z tej grupy.
Aktualizacja: teraz używam jeszcze prostszego systemu, możesz łatwo mieć czytelną konfigurację iptables za pomocą ferm i po prostu użyć programu sgdo uruchomienia programu z określoną grupą. Iptables pozwala również na przekierowanie ruchu, więc możesz nawet przekierować go do oddzielnego interfejsu lub lokalnego serwera proxy na porcie, co pozwala na filtrowanie w wireshark lub LOGowanie pakietów bezpośrednio z iptables, jeśli nie chcesz wyłączać całego internetu sprawdzają ruch.
Dostosowanie go do uruchamiania programu w grupie i odcinania całego pozostałego ruchu z iptables na czas wykonywania nie jest zbyt skomplikowane, a wtedy można przechwytywać ruch tylko z tego procesu.
Jeśli kiedykolwiek dojdę do napisania tego, zamieszczę link tutaj.
Z drugiej strony, zawsze możesz uruchomić proces na maszynie wirtualnej i powąchać odpowiedni interfejs, aby wyodrębnić połączenia, które tworzy, ale byłoby to znacznie gorsze rozwiązanie ...
Otwórz terminal i uruchom mały kontener: docker run -t -i ubuntu /bin/bash (zmień „ubuntu” na swoją ulubioną dystrybucję, to nie musi być takie samo jak w prawdziwym systemie)
Zainstaluj aplikację w kontenerze w taki sam sposób, w jaki instalowałbyś ją w prawdziwym systemie.
Uruchom wireshark w swoim rzeczywistym systemie, przejdź do przechwytywania> opcje. W oknie, które się otworzy, zobaczysz wszystkie swoje interfejsy. Zamiast wybierać any, wlan0, eth0, ... wybrać nowy wirtualny interfejs docker0zamiast.
Zacznij robić zdjęcia
Uruchom aplikację w kontenerze
Możesz mieć wątpliwości co do uruchamiania oprogramowania w kontenerze, więc oto odpowiedzi na pytania, które prawdopodobnie zechcesz zadać:
Czy moja aplikacja będzie działać w kontenerze?Prawie na pewno tak, ale być może będziesz musiał trochę dowiedzieć się o dockerze, aby działał
Czy moja aplikacja nie będzie działać wolno? Nieistotny. Jeśli Twój program wykonuje ciężkie obliczenia przez tydzień, może to zająć teraz tydzień i 3 sekundy
Co jeśli moje oprogramowanie lub coś innego zepsuje się w kontenerze? To fajna rzecz w pojemnikach. Cokolwiek działa w środku, może tylko zepsuć obecny kontener i nie zaszkodzi reszcie systemu.
W niektórych przypadkach nie można filtrować według identyfikatora procesu. Na przykład w moim przypadku musiałem węszyć ruch z jednego procesu. Ale znalazłem w jego konfiguracji adres IP maszyny docelowej, dodany filtr ip.dst==someipi voila. W każdym razie to nie zadziała, ale dla niektórych jest przydatne.
Nie jestem pewien, czy to niezawodny sposób. Jeśli masz serwer TCP nasłuchujący na porcie, ale nie zablokowałeś obsługi TCP przez jądro, jedno lub oba jądro lub twoja aplikacja mogą odpowiedzieć na tym porcie.
aeb0
0
Użycie stracejest bardziej odpowiednie w tej sytuacji.
strace -f -e trace=network -s 10000 -p <PID>;
opcje -fśledzenia wszystkich rozwidlonych procesów, -e trace=netwrokfiltrowania tylko wywołań systemowych sieci i -swyświetlania łańcucha o długości do 10000 znaków.
Możesz również śledzić tylko niektóre wywołania, takie jak operacje wysyłania, odbierania i odczytu.
Odpowiedzi:
Nie wiem jak. PID nie pojawia się na kablu (ogólnie rzecz biorąc), a Wireshark pozwala spojrzeć na to, co jest na kablu - potencjalnie wszystkie maszyny, które komunikują się przez kabel. W każdym razie identyfikatory procesów nie są unikalne na różnych komputerach.
źródło
Na wypadek, gdybyś szukał alternatywnego sposobu, a środowiskiem, którego używasz, jest Windows, dobrym wyborem jest Microsoft Network Monitor 3.3. Zawiera kolumnę z nazwą procesu. Z łatwością dodasz go do filtra za pomocą menu kontekstowego i zastosujesz filtr .. Jak zwykle GUI jest bardzo intuicyjne ...
źródło
Możesz dopasować numery portów od wireshark do numerów portów od, powiedzmy, netstat, który powie ci PID procesu nasłuchującego na tym porcie.
źródło
Użyj programu Microsoft Message Analyzer w wersji 1.4
Przejdź do ProcessId z selektora pól.
Kliknij prawym przyciskiem myszy i Dodaj jako kolumnę
źródło
W systemie Windows istnieje eksperymentalna kompilacja, która to robi, zgodnie z opisem na liście mailingowej Filtruj według nazwy procesu lokalnego
źródło
Jest to ważna rzecz, którą można zrobić, aby monitorować, gdzie pewne procesy próbują się połączyć, i wydaje się, że nie ma na to żadnego wygodnego sposobu na Linuksie. Jednak możliwych jest kilka obejść, dlatego uważam, że warto o nich wspomnieć.
Istnieje program o nazwie nonet, który umożliwia uruchamianie programu bez dostępu do Internetu (mam w systemie skonfigurowaną większość programów uruchamiających). Używa setguid do uruchamiania procesu w grupie nonet i ustawia iptables regułę aby odrzucać wszystkie połączenia z tej grupy.
Aktualizacja: teraz używam jeszcze prostszego systemu, możesz łatwo mieć czytelną konfigurację iptables za pomocą ferm i po prostu użyć programu
sg
do uruchomienia programu z określoną grupą. Iptables pozwala również na przekierowanie ruchu, więc możesz nawet przekierować go do oddzielnego interfejsu lub lokalnego serwera proxy na porcie, co pozwala na filtrowanie w wireshark lub LOGowanie pakietów bezpośrednio z iptables, jeśli nie chcesz wyłączać całego internetu sprawdzają ruch.Dostosowanie go do uruchamiania programu w grupie i odcinania całego pozostałego ruchu z iptables na czas wykonywania nie jest zbyt skomplikowane, a wtedy można przechwytywać ruch tylko z tego procesu.
Jeśli kiedykolwiek dojdę do napisania tego, zamieszczę link tutaj.
Z drugiej strony, zawsze możesz uruchomić proces na maszynie wirtualnej i powąchać odpowiedni interfejs, aby wyodrębnić połączenia, które tworzy, ale byłoby to znacznie gorsze rozwiązanie ...
źródło
Jeśli chcesz śledzić aplikację, która wciąż musi zostać uruchomiona, z pewnością jest to możliwe:
docker run -t -i ubuntu /bin/bash
(zmień „ubuntu” na swoją ulubioną dystrybucję, to nie musi być takie samo jak w prawdziwym systemie)any
,wlan0
,eth0
, ... wybrać nowy wirtualny interfejsdocker0
zamiast.Możesz mieć wątpliwości co do uruchamiania oprogramowania w kontenerze, więc oto odpowiedzi na pytania, które prawdopodobnie zechcesz zadać:
źródło
W niektórych przypadkach nie można filtrować według identyfikatora procesu. Na przykład w moim przypadku musiałem węszyć ruch z jednego procesu. Ale znalazłem w jego konfiguracji adres IP maszyny docelowej, dodany filtr
ip.dst==someip
i voila. W każdym razie to nie zadziała, ale dla niektórych jest przydatne.źródło
Uzyskaj numer portu za pomocą
netstat
:A następnie użyj filtru Wireshark:
źródło
Użycie
strace
jest bardziej odpowiednie w tej sytuacji.opcje
-f
śledzenia wszystkich rozwidlonych procesów,-e trace=netwrok
filtrowania tylko wywołań systemowych sieci i-s
wyświetlania łańcucha o długości do 10000 znaków.Możesz również śledzić tylko niektóre wywołania, takie jak operacje wysyłania, odbierania i odczytu.
źródło
Możesz sprawdzić numery portów za pomocą tych przykładów poleceń w programie wireshark: -
tcp.port == 80
tcp.port == 14220
źródło