Como posso saber qual aplicativo está usando a rede?

9

Muito ocasionalmente, ao usar o Mac, percebo que minha conexão com a Internet está diminuindo. Usando o Monitor de Atividade, percebo que é porque algo está baixando dados na velocidade máxima que minha conexão pode suportar - mas não sei dizer o que é responsável por isso. Isso pode ser causado por várias coisas diferentes (sincronização do Dropbox; algum aplicativo está fazendo uma atualização automática; mais recentemente, foi um buffer de vídeo em uma guia do navegador que eu havia esquecido), por isso seria muito útil ter uma maneira de dizer qual aplicativo é responsável pelo uso da rede. Isso é possível no OS X? Idealmente, estou procurando uma solução gratuita. (A linha de comando está OK.) Estou no Snow Leopard se isso faz diferença.

Nathaniel
fonte

Respostas:

6

Você pode tentar esta linha dtraceúnica:

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

Deixe-o funcionar por um tempo e pressione Control-C. Ele imprimirá um resumo do número de bytes lidos dos soquetes, distribuídos entre os processos. Para uma visão mais detalhada, substitua sumpor quantize. Ou apenas para ver uma contagem de leituras de soquete, substitua sumpor count.

Exoneração de responsabilidade: Eu apenas tentei isso no Lion, mas no AFAIK não ocorreram grandes alterações na capacidade do dtrace entre o SL e o Lion.

Harald Hanche-Olsen
fonte
11
Muito Obrigado! Simples e eficaz e faz exatamente o que eu precisava. Funciona muito bem no Snow Leopard.
Nathaniel
... embora, na verdade, usando "soma" os números pareçam um pouco estranhos - o Google Chrome normalmente recebe um número negativo (!). Mas, usando o quantize, eles parecem sensatos.
Nathaniel
Números negativos, não é? Talvez seja um caso de estouro. Ou, se você receber pequenos números negativos, lembre-se de que as chamadas do sistema retornam -1 se ocorrer um erro. Se estiver cheio, meu palpite é que isso não aconteceria quando você executasse um kernel de 64 bits.
Harald Hanche-Olsen
São números negativos de tamanho médio. Aqui está uma saída típica (obtida durante o carregamento desta página no Chrome): 250 Google Chrome -159; 39 KernelEventAgen 1; 19 mDNSResponder 2240; mas talvez eu os esteja interpretando mal - quando eu uso 'quanitze', há uma coluna "value" que pode ter valores negativos e uma coluna "count". Parece que o comando sum informa a soma de (valor) * (contagem). Talvez valores negativos signifiquem pacotes recebidos, ou algo assim?
18137 Nathaniel
Não, isso é tudo sobre dados recebidos ... Eu acho que o chrome faz pesquisas frequentes chamando recvfrom com um curto tempo limite definido no soquete; nesse caso, o valor de retorno -1 resulta se não houver dados. Veja a página de manual para recvfrom.
Harald Hanche-Olsen
6

Firewalls

Você pode usar Little Snitch ou HandsOff . Eles são ótimos firewalls e ambos têm um recurso "Network Monitor", que fará o trabalho:

Little Snitch inclui um Monitor de rede, mostrando informações detalhadas de todo o tráfego de entrada e saída da rede.
Um ícone de status na barra de menus fornece um resumo da atividade atual da rede e uma janela do monitor com informações mais abrangentes é exibida automaticamente em caso de novos eventos de tráfego.

Hands Off é um aplicativo para monitorar e controlar o acesso de aplicativos à sua rede e discos. A capacidade de monitorar as atividades normalmente imperceptíveis permite que você tome decisões informadas sobre a transferência de suas informações privadas, evitando assim o vazamento de informações confidenciais.

insira a descrição da imagem aqui insira a descrição da imagem aqui

A rede monitora: Little Snitch (esquerda), HandsOff (direita)

Nettop

Uma solução cli gratuita e integrada (infelizmente não está incluída no Snow Leopard) seria o nettop . O nettop agrupa o tráfego por programa e porta e mede várias estatísticas da rede.

De outros

Existem alguns outros programas que capturam e medem o tráfego ( iftop , wireshark , tcpdump ), mas eles não conhecem o pid originado. Para fazer a conexão, você deve usar o netstat .

mspasov
fonte
Obrigado! Editei a pergunta para indicar que estou idealmente procurando uma solução gratuita (30 € é demais para algo que eu usaria apenas ocasionalmente), mas se não houver uma maneira gratuita de fazê-lo, então eu ' Aceito esta resposta.
Nathaniel
Desculpe, minha culpa. Vou tentar encontrar uma alternativa gratuita e atualizará minha resposta.
31412 mspasov
Ha! nettopera novo para mim. Parece útil.
Harald Hanche-Olsen
Também aceitaria essa resposta se fosse possível. Se eu atualizar para o Lion, parece que o nettop será realmente útil.
Nathaniel
4
sudo fs_usage -f network

lhe dará todos os acessos à rede por todos os aplicativos (e processos). Normalmente, o processo de criação de muito tráfego é o que aparece com mais frequência na saída.

nohillside
fonte
11
Obrigado, isso é realmente útil. Estou impressionado com o número de respostas úteis para esta pergunta.
Nathaniel
1

O "livro do DTrace" possui um script, soconnect.d , que faz isso.

Copie a versão "Mac OS X", cole-a em um arquivo de texto e execute-a no terminal com sudo dtrace -s soconnect.d.

Ken
fonte
Mas isso não fornece uma noção da quantidade de tráfego de rede que um processo recebe, não é? Ele apenas rastreia as conexões, até onde eu sei.
Harald Hanche-Olsen
1

O Activity Monitor também possui colunas para bytes recebidos e enviados desde 10.9:

Lri
fonte