Sniffer de pacotes de rede para Linux que captura os nomes dos aplicativos?

1

Eu tentei o Wireshark. Ele mostra o endereço IP de origem e destino, o número da porta e o conteúdo do pacote, mas nada sobre qual aplicativo está usando os pacotes.

Aparentemente, o tcpdump é semelhante; dados de rede, mas sem informações sobre qual aplicativo.

O Wireshark estava mostrando muito mais atividade do que eu esperava (incluindo IPs de destino fora da minha rede doméstica) quando o navegador, e-mail e outros programas conhecidos relacionados à Internet eram fechados e outros computadores estavam desligados. Mas sem saber qual programa está enviando ou recebendo, é difícil fazer algo sobre isso.

Estou usando o Ubuntu 11.04.

Eu não estou procurando por um sniffer de rede geral; Eu só quero ver o que está entrando e saindo da mesma máquina em que o sniffer está rodando.

Existe algo parecido no Linux? Mesmo se isso custa dinheiro? Ou será que não sei como ou onde procurar o nome do aplicativo no Wireshark?

    
por Mike Rowave 22.06.2011 / 03:06

2 respostas

3

Acho que a maioria dos sniffers não se esforça para determinar se a máquina atual em que eles estão rodando é o ponto final de qualquer fluxo de tráfego que eles estão vendo (em oposição a, digamos, ver quadros de outras máquinas através de um hub ou uma porta de espelho em um switch, ou em um canal wireless, ou vendo frames que a máquina atual está apenas fazendo bridge / routing / NAT-gatewaying). Assim, a maioria dos sniffers não se preocupam em ver se o nome do processo ou aplicativo pode ser encontrado, porque isso só pode ser encontrado se a máquina local for o ponto final do tráfego.

Isso não é tão conveniente quanto ter um sniffer para você, mas aqui está uma solução alternativa: Como você sabe quais endereços pertencem à sua máquina local, depois de encontrar o número da porta local, é possível procurar o nome do processo usando esse número de porta usando lsof da seguinte forma:

sudo lsof +c15 -i :$PORT

... onde "$ PORT" é o número da porta que você gosta.

    
por 22.06.2011 / 06:51
3

Eu olhei para isso algum tempo atrás e não encontrei nada.
Há uma técnica de script simples que você pode fazer com base em netstat .

Ele se baseia no detalhe (como você observou) de que não há necessidade de farejar todo o tráfego - o que você quer ver é o connection table e o id do programa associado .

netstat -npt

É assim que as opções funcionam,

-n -- shows plain network addresses without resolving names (makes things faster)
-p -- gives the PID for the associated program
-t -- restricts to looking at TCP connections

Isso funciona muito rápido e pode ser passado por um script para manter o registro dos dados (conectado ao cron?).
Você poderia filtrar esses dados para derivar um banco de dados de

{program name, program id, IP 5-tuple, time-window}

A desvantagem é que, como não há nenhuma entrada de conexão UDP (das que o TCP mantém), ela realmente vai ficar farejando aplicativos UDP.

Eu realmente gostaria de saber se existe uma ferramenta existente fazendo isso :-) É um bom projeto.
Eu acho que escrevi um script python nessas linhas há algum tempo.

    
por 22.06.2011 / 06:48