Jak sprawdzić, która aplikacja korzysta z sieci?

9

Bardzo rzadko podczas korzystania z komputera Mac zauważam, że moje połączenie internetowe zwalnia. Za pomocą Monitora aktywności widzę, że dzieje się tak, ponieważ coś pobiera dane z pełną szybkością, którą moje połączenie może obsługiwać --- ale nie wiem, jak powiedzieć, kto jest za to odpowiedzialny. Może to być spowodowane kilkoma różnymi rzeczami (synchronizacja Dropboksa; niektóre aplikacje wykonujące automatyczną aktualizację; ostatnio było to buforowanie wideo na karcie przeglądarki, o której zapomniałem), więc bardzo przydatny byłby sposób, aby powiedzieć która aplikacja jest odpowiedzialna za korzystanie z sieci. Czy taka możliwość jest możliwa w OS X? Idealnie szukam darmowego rozwiązania. (Wiersz poleceń jest OK.) Jestem na Snow Leopard, jeśli to robi różnicę.

Nataniel
źródło

Odpowiedzi:

6

Możesz wypróbować ten dtraceliner:

sudo dtrace -n 'syscall::recvfrom:return { @[pid,execname] = sum(arg0); }'

Pozwól mu działać przez chwilę, a następnie naciśnij Control-C. Wyświetli podsumowanie liczby bajtów odczytanych z gniazd, rozdzielonych między procesy. W celu bardziej szczegółowego widoku zastąpić sumprzez quantize. Lub po prostu, aby zobaczyć liczbę odczytów gniazd, zamień sumna count.

Oświadczenie: Próbowałem tego tylko na Lionie, ale AFAIK nie zmienił się między SL a Lionem i nie ma wielkich zmian w zdolnościach dtrace.

Harald Hanche-Olsen
źródło
1
Wielkie dzięki! Prosty i skuteczny i robi dokładnie to, czego potrzebowałem. Działa dobrze na Snow Leopard.
Nathaniel,
... chociaż w rzeczywistości przy użyciu „sumy” liczby wyglądają nieco dziwnie - Google Chrome zwykle otrzymuje liczbę ujemną (!). Ale przy użyciu kwantyzacji wyglądają rozsądnie.
Nathaniel,
Liczby ujemne, co? Może to przypadek przepełnienia. Lub jeśli otrzymasz małe liczby ujemne, pamiętaj, że wywołania systemowe zwracają -1, jeśli wystąpił błąd. Jeśli jest przepełnione, domyślam się, że tak się nie stanie po uruchomieniu 64-bitowego jądra.
Harald Hanche-Olsen
Są to średnie liczby ujemne. Oto typowe wyjście (zrobione podczas ponownego ładowania tej strony w Chrome): 250 Google Chrome -159; 39 KernelEventAgen 1; 19 mDNSResponder 2240; ale może po prostu źle je interpretuję - kiedy używam „quanitze”, pojawia się kolumna „wartość”, która może mieć wartości ujemne, i kolumna „liczba”. Wygląda na to, że polecenie sum zgłasza sumę (wartość) * (liczba). Może wartości ujemne oznaczają przychodzące pakiety lub coś takiego?
Nathaniel
Nie, tu chodzi o przychodzące dane… Myślę, że chrome często odpytuje, wywołując recvfrom z krótkim limitem czasu ustawionym w gnieździe, w którym to przypadku zwracana jest wartość -1, jeśli nie ma danych. Odwołaj się do strony podręcznika.
Harald Hanche-Olsen
6

Zapory ogniowe

Możesz użyć Little Snitch lub HandsOff . Są świetnymi zaporami ogniowymi i oba mają funkcję „Monitor sieci”, która wykona zadanie:

Little Snitch zawiera Monitor sieci, pokazujący szczegółowe informacje o całym przychodzącym i wychodzącym ruchu sieciowym.
Ikona stanu na pasku menu zawiera podsumowanie bieżącej aktywności sieci, a okno monitora z bardziej wyczerpującymi informacjami pojawia się automatycznie w przypadku nowych zdarzeń drogowych.

Hands Off to aplikacja do monitorowania i kontrolowania dostępu aplikacji do sieci i dysków. Możliwość monitorowania normalnie niezauważalnych czynności umożliwia podejmowanie świadomych decyzji dotyczących przekazywania prywatnych informacji, a tym samym unikanie wycieku poufnych informacji.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Monitory sieciowe: Little Snitch (po lewej), HandsOff (po prawej)

Nettop

Darmowe i wbudowane rozwiązanie cli (niestety nie jest zawarte w systemie Snow Leopard) to nettop . nettop grupuje ruch według programu i portu i mierzy różne statystyki sieci.

Inny

Istnieje kilka innych programów, które przechwytują i mierzą ruch ( iftop , wireshark , tcpdump ), ale nie znają oryginalnego pid. Aby nawiązać połączenie, powinieneś użyć netstat .

mspasov
źródło
Dzięki! Zredagowałem pytanie, aby wskazać, że idealnie szukam darmowego rozwiązania (30 EUR to za dużo na coś, z którego korzystam bardzo rzadko), ale jeśli nie ma darmowego sposobu, to „ Przyjmuję tę odpowiedź.
Nathaniel
Przepraszam moja wina. Spróbuję znaleźć darmową alternatywę i zaktualizuję moją odpowiedź.
mspasov
Ha! nettopbył dla mnie nowy. Wygląda na przydatny.
Harald Hanche-Olsen
Przyjęłbym również tę odpowiedź, gdyby to było możliwe. Jeśli przejdę na Lion, wygląda na to, że nettop będzie naprawdę przydatny.
Nathaniel,
4
sudo fs_usage -f network

zapewni Ci dostęp do sieci dla wszystkich aplikacji (i procesów). Zwykle proces generujący duży ruch jest tym, który najczęściej pojawia się na wyjściu.

nohillside
źródło
1
Dzięki, to jest naprawdę przydatne. Jestem pod wrażeniem liczby pomocnych odpowiedzi na to pytanie.
Nathaniel,
1

„Książka DTrace” ma skrypt soconnect.d , który to robi.

Skopiuj wersję „Mac OS X”, wklej ją do pliku tekstowego, a następnie uruchom za pomocą terminala sudo dtrace -s soconnect.d.

Rozpoznać
źródło
Ale to nie daje pojęcia o ruchu w sieci, który otrzymuje proces, prawda? O ile mi wiadomo, śledzi tylko połączenia.
Harald Hanche-Olsen
1

Monitor aktywności ma również kolumny dla odebranych i wysłanych bajtów od 10.9:

Lri
źródło