Come posso sapere quale applicazione sta usando la rete?


9

Molto occasionalmente quando uso il mio Mac, noto che la mia connessione Internet rallenta. Usando Activity Monitor posso vedere che è perché qualcosa sta scaricando i dati alla massima velocità supportata dalla mia connessione --- ma non so come dirlo. Può essere causato da diverse cose (sincronizzazione Dropbox; alcune app eseguono un aggiornamento automatico; più recentemente è stato un video buffering in una scheda del browser che avevo dimenticato) quindi sarebbe davvero utile avere un modo per dirlo quale app è responsabile dell'uso della rete. Una cosa del genere è possibile in OS X? Idealmente sto cercando una soluzione gratuita. (La riga di comando è OK.) Sono su Snow Leopard se fa la differenza.

Risposte:


6

Puoi provare questo dtraceone-liner:

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

Lascialo funzionare per un po ', quindi premi Control-C. Stampa un riepilogo del numero di byte letti dai socket, distribuiti tra i processi. Per una visione più dettagliata, sostituisci sumcon quantize. O semplicemente per vedere un conteggio delle letture dei socket, sostituiscile sumcon count.

Disclaimer: l'ho provato solo su Lion, ma AFAIK non si sono verificati grandi cambiamenti nell'abilità dtrace tra SL e Lion.


1
Grazie molto! Semplice ed efficace e fa esattamente quello di cui avevo bisogno. Funziona perfettamente su Snow Leopard.
Nathaniel,

... anche se in realtà, usando "somma" i numeri sembrano un po 'strani - Google Chrome di solito ottiene un numero negativo (!). Ma usando quantize sembrano sensati.
Nathaniel,

Numeri negativi, eh? Forse è un caso di overflow. Oppure, se ricevi piccoli numeri negativi, ricorda che le chiamate di sistema restituiscono -1 se si è verificato un errore. Se è overflow, suppongo che non accadrà quando si esegue un kernel a 64 bit.
Harald Hanche-Olsen l'

Sono numeri negativi di medie dimensioni. Ecco un tipico output (preso durante il nuovo caricamento di questa pagina in Chrome): 250 Google Chrome -159; 39 KernelEventAgen 1; 19 mDNSResponder 2240; ma potrei semplicemente interpretarli erroneamente - quando uso 'quanitze' c'è una colonna "valore" che può avere valori negativi e una colonna "conteggio". Sembra che il comando sum riporti la somma di (valore) * (conteggio). Forse valori negativi significano pacchetti in arrivo o qualcosa del genere?
Nathaniel,

No, si tratta solo di dati in entrata ... Immagino che Chrome esegua frequentemente il polling chiamando recvfrom con un breve timeout impostato nel socket, nel qual caso il valore di ritorno -1 risulta se non ci sono dati. Vedere la pagina del manuale per recvfrom.
Harald Hanche-Olsen l'

6

firewall

È possibile utilizzare Little Snitch o HandsOff . Sono ottimi firewall ed entrambi hanno una funzione "Network Monitor", che farà il lavoro:

Little Snitch include un Network Monitor, che mostra informazioni dettagliate su tutto il traffico di rete in entrata e in uscita.
Un'icona di stato nella barra dei menu fornisce un riepilogo dell'attività di rete corrente e una finestra di monitoraggio con informazioni più complete si apre automaticamente in caso di nuovi eventi di traffico.

Hands Off è un'applicazione per monitorare e controllare l'accesso delle applicazioni alla rete e ai dischi. Essere in grado di monitorare le attività normalmente impercettibili ti consente di prendere decisioni informate in merito al trasferimento delle tue informazioni private, evitando così la perdita di informazioni riservate.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

I monitor di rete di: Little Snitch (a sinistra), HandsOff (a destra)

nettop

Una soluzione cli gratuita e integrata (purtroppo non è inclusa in Snow Leopard) sarebbe nettop . nettop raggruppa il traffico per programma e porta e misura varie statistiche di rete.

Altro

Esistono pochi altri programmi che catturano e misurano il traffico ( iftop , WireShark , tcpdump ) ma non conoscono il pid originato. Per effettuare la connessione è necessario utilizzare netstat .


Grazie! Ho modificato la domanda per indicare che sto idealmente cercando una soluzione gratuita (€ 30 è troppo per qualcosa che userei solo occasionalmente), ma se non c'è un modo gratuito per farlo, allora ' Accetterò questa risposta.
Nathaniel,

Scusa colpa mia. Proverò a trovare un'alternativa gratuita e aggiornerò la mia risposta.
mspasov,

Ha! nettopera nuovo per me. Sembra a portata di mano.
Harald Hanche-Olsen,

Accetterei anche questa risposta se fosse possibile. Se eseguo l'aggiornamento a Lion, sembra che Nettop sarà davvero utile.
Nathaniel,

4
sudo fs_usage -f network

ti darà tutti gli accessi alla rete da parte di tutte le applicazioni (e processi). Di solito il processo che crea molto traffico è quello che appare più spesso nell'output.


1
Grazie, è davvero utile. Sono impressionato dal numero di risposte utili a questa domanda.
Nathaniel,

1

Il "libro DTrace" ha una sceneggiatura, soconnect.d , che fa questo.

Copia la versione "Mac OS X", incollala in un file di testo, quindi eseguila dal terminale con sudo dtrace -s soconnect.d.


Ma questo non ti dà un'idea della quantità di traffico di rete che un processo riceve, vero? Tiene traccia delle connessioni, per quanto ne so.
Harald Hanche-Olsen,

1

Activity Monitor ha anche colonne per byte ricevuti e inviati dal 10.9:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.