Filtruj według procesu / PID w Wireshark


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.


7
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 ...


10
Microsoft Network Monitor 3.4 jest dostępny pod adresem microsoft.com/en-us/download/details.aspx?id=4865
gt

39
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.


12
cóż, to może nie zadziałać ... program otwiera się i zamyka wiele portów lokalnych i zdalnych
Ryan Fernandes

11

Użyj programu Microsoft Message Analyzer w wersji 1.4

Przejdź do ProcessId z selektora pól.

Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId

Kliknij prawym przyciskiem myszy i Dodaj jako kolumnę


1
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.
Tobias J

3

W systemie Windows istnieje eksperymentalna kompilacja, która to robi, zgodnie z opisem na liście mailingowej Filtruj według nazwy procesu lokalnego


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 ...


3

Jeśli chcesz śledzić aplikację, która wciąż musi zostać uruchomiona, z pewnością jest to możliwe:

  1. Zainstaluj docker (patrz https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
  2. 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)
  3. Zainstaluj aplikację w kontenerze w taki sam sposób, w jaki instalowałbyś ją w prawdziwym systemie.
  4. 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.
  5. Zacznij robić zdjęcia
  6. 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.

0

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.


0

Uzyskaj numer portu za pomocą netstat:

netstat -b

A następnie użyj filtru Wireshark:

tcp.port == portnumber

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.

strace -f -e trace=send,recv,read -s 10000 -p <PID>;

-16

Możesz sprawdzić numery portów za pomocą tych przykładów poleceń w programie wireshark: -

tcp.port == 80

tcp.port == 14220

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.