Chciałbym zbadać ruch sieciowy obsługiwany przez pojedynczy proces, ale proste przechwytywanie sieci nie będzie działać, ponieważ mam do czynienia z tak zajętym systemem (wiele innych ruchów odbywa się w tym samym czasie). Czy istnieje sposób na izolowanie tcpdump
lub wireshark
przechwytywanie ruchu sieciowego pojedynczego określonego procesu? (Używanie netstat
jest niewystarczające.)
źródło
netstat
i proste filtry przechwytywania sieci na ruchliwym komputerze.netstat
; Będę w stanie złapać tylko długotrwałe połączenia. :(Aby rozpocząć i monitorować nowy proces:
Aby monitorować istniejący proces ze znanym PID:
-f
jest przeznaczony do „śledzenia nowych procesów”-e
definiuje filtr-s
ustawia limit ciągów na więcej niż 32-p
pobiera identyfikator procesu, aby dołączyćźródło
Wiem, że ten wątek jest trochę stary, ale myślę, że może to pomóc niektórym z was:
Jeśli twoje jądro na to pozwala, przechwytywanie ruchu sieciowego pojedynczego procesu można bardzo łatwo uruchomić, uruchamiając wspomniany proces w izolowanej sieciowej przestrzeni nazw i używając wireshark (lub innych standardowych narzędzi sieciowych) również we wspomnianej przestrzeni nazw.
Konfiguracja może wydawać się nieco złożona, ale gdy ją zrozumiesz i zapoznasz się z nią, znacznie ułatwi ci to pracę.
Aby to zrobić:
utwórz testową przestrzeń nazw sieci:
utwórz parę wirtualnych interfejsów sieciowych (veth-a i veth-b):
zmień aktywną przestrzeń nazw interfejsu veth-a:
skonfiguruj adresy IP wirtualnych interfejsów:
skonfiguruj routing w testowej przestrzeni nazw:
aktywuj ip_forward i ustal regułę NAT, aby przekazywać ruch przychodzący z utworzonej przestrzeni nazw (musisz dostosować interfejs sieciowy i adres IP SNAT):
(Jeśli wolisz, możesz także użyć reguły MASQUERADE)
wreszcie możesz uruchomić proces, który chcesz przeanalizować w nowej przestrzeni nazw, a także wireshark:
Będziesz musiał monitorować interfejs veth-a.
źródło
socat
.--to-source
argumentemiptables
? Czy to adres IP interfejsu, który przekazujesz do-o
opcji, adres IP, który tworzysz, czy ??? Próbowałem wersję maskarady, że nie potrzeba--to-source
, jak opisano tutaj , i to działa!To pokaże połączenia, które tworzy aplikacja, w tym używany port.
źródło
Pomysł: czy można powiązać aplikację z innym adresem IP? Jeśli tak, możesz użyć zwykłych podejrzanych ( tcpdump itp.)
Narzędzia dla aplikacji, które nie są w stanie powiązać z innym adresem IP:
http://freshmeat.net/projects/fixsrcip
http://freshmeat.net/projects/force_bind
źródło
Doszedłem do podobnego problemu i udało mi się go rozwiązać na podstawie tej odpowiedzi autorstwa ioerror , używając NFLOG, jak opisano tutaj :
Następnie możesz utworzyć uruchamianie danego procesu z konta użytkownika, które nie robi nic innego - i voila, właśnie odizolowałeś i przechwyciłeś ruch z jednego procesu.
Chciałem tylko wysłać wiadomość z powrotem na wypadek, gdyby pomógł komukolwiek.
źródło
Napisałem aplikację C, która robi to, co opisano w świetnej odpowiedzi powyżej felahdab!
Zobacz tutaj: repozytorium nsntrace github
źródło
To jest brudny hack, ale sugerowałbym przekierowanie lub cel dziennika z iptables dla danego UID. na przykład:
Warto również przyjrzeć się czegoś takiego jak „--log-tcp-sekwencja”, „--log-tcp-options”, „--log-ip-options”, „--log-uid” dla tego celu dziennika . Podejrzewam, że to pomoże ci jedynie przetworzyć plik PCAP, który zawiera mnóstwo innych danych.
Cel NFLOG może być przydatny, jeśli chcesz oflagować pakiety, a następnie pewne otagowane pakiety zostaną wysłane przez gniazdo netlink do wybranego procesu. Zastanawiam się, czy byłoby to przydatne do zhakowania czegoś przy użyciu Wireshark i konkretnej aplikacji działającej jako konkretny użytkownik?
źródło
Możesz spróbować tracedump - http://mutrics.iitis.pl/tracedump
Robi dokładnie to, co chcesz, możesz podać identyfikator procesu lub uruchomić program.
źródło
Spróbuj uruchomić proces jesteś zainteresowany pod strace :
Dostarczy ci bardzo szczegółowych informacji o tym, co robi twój proces. Ponieważ proces może otworzyć dowolne porty w dowolnym miejscu, za pomocą predefiniowanego filtra możesz coś przeoczyć.
Innym podejściem byłoby użycie zredukowanej maszyny wirtualnej lub maszyny testowej w sieci i umieszczenie na niej procesu osobno. Następnie możesz po prostu użyć Wireshark, aby złapać wszystko z tego komputera. Będziesz prawie pewien, że przechwytywany ruch będzie istotny.
źródło
Opierając się na odpowiedzi autorstwa ioerror , podejrzewam, że możesz użyć,
iptables --uid-owner
aby ustawić znacznik na ruchu, a następnie możesz poprosić wireshark o przechwycenie tylko ruchu z tym znacznikiem. Możesz być w stanie użyć DSCP (marker usług różnicowych), id przepływu lub markera qos.W rzeczywistości można użyć tego do wysłania tych pakietów z innego interfejsu, a następnie przechwycenia tylko na tym interfejsie.
źródło
błąd wireshark # 1184 to ta funkcja. Nie jest jeszcze zaimplementowany.
Skopiowano od użytkownika cmanynard z ask.wireshark.org
źródło
może iptables i ulog mogą działać? Nie, że mam dokładny przepis, ale myślę, że iptables może dopasować procesy, po dopasowaniu możesz użyć uloga.
źródło
iptables -m owner --pid-owner $PID
został usunięty w Linuksie 2.6.14: ftp.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.14Myślę, że możesz utworzyć skrypt powłoki, który będzie przechodził przez wykonanie polecenia netstat i zalogowanie go do pliku tekstowego. Coś w stylu (bardzo szorstkie kroki):
Nie jestem programistą, więc nie mogę tego dopracować. Ale ktoś tutaj może zacząć od miejsca, w którym skończyłem i stworzyć dla ciebie działający skrypt.
źródło