Utilizando o tcpdump e o wireshark


Monitorar o tráfego de rede é algo fundamental para a solução de problemas. Um programa muito bom para fazer isso é o tcpdump. O tcpdump é um conhecido sniffer do mundo GNU/Linux, um sniffer é um programa que faz com que a placa de rede entre em modo promíscuo e capture todos os pacotes (da rede) que chegem até a máquina, independentes de serem para ela ou não, sejam aceitos, com isso ele gera uma saída, no terminal ou em um arquivo de texto, que pode ser analisada.


O tcpdump também permite o uso de filtros como de tal ip, para porta x, protocolo x. Lembrando que o tcpdump deve ser executado como root.


Bom deixe-me mostrar a sintaxe básica, depois algo mais refinado. Com um comando tipo esse:


# tcpdump -i eth0


Você terá a lista de pacotes passando por sua interface eth0. Entender a saída do programa não é muito confortável no começo, exige uma boa leitura do manual do tcpdump e também conhecimento do tcp. Mas basicamente é algo como:


origem.porta > destino.porta: flags (nº sequência de dados) ...


Eu realmente recomendo uma boa lida no manual do tcpdump se você quiser endenter cada detalhe da saída.


O parâmetro -i pode receber também a opção any que faz o tcpdump capturar pacotes em todas as suas interfaces de rede.


As principais opções de filtro no tcpdump são:


-n : Não faz a resolução dos nomes, mantendo origem, destino e porta como números.


host : Define um host específico, pode ser um ip ou um nome.


src : Define o host origem, pode ser ip ou nome.


dst : Define o host destino, pode ser ip ou nome.


-w : Escreve a saída em um arquivo, o nome do arquivo deve ser fornecido.


-r : Lê o tráfego que foi armazenado em um arquivo, nesse caso não é necessário ser root.


-s : Define, em bytes, o tamanho máximo dos pacotes que serão capturados. O padrão são 68 bytes que são suficientes para alguns protocolo, mas pode truncar (não capturar completamente) um pacote. Um bom número para ser definido é 1000.


Com essas opções já dá para fazer muita coisa. Volto a dizer que uma lida no manual do tcpdump pode enriquecer muito o seu conhecimento.


Vamos a mais exemplos:


# tcpdump -i eth0 -n host 192.168.1.1


Captura todos os pacotes destinados ou com origem em 192.168.1.1 sem resolver nomes.


# tcpdump -i eth0 -s 1000 src 192.168.1.1


Captura todos os pacotes com origem em 192.168.1.1 resolvendo nomes e gravando até 1000 bytes de cada pacote.


# tcpdump -i eth0 -w trafego.cap


Captura todo o tráfego na eth0 e escreve a saída no arquivo trafego.cap


$ tcpdump -r trafego.cap


Lê o tráfego gravado em trafego.cap


Como mostrado nesse último exemplo o tcpdump também lê os arquivos gerados, isso é muito útil quando você precisa analisar os dados com mais cuidado, ou guardá-los para uma análise posterior.


Uma outra maneira de ler esse tráfego é com o Wireshark, esse é um outro sniffer (multiplataforma) bastante utilizado. O Wireshark é capaz de ler os arquivos gerados pelo tcpdump, mas com algumas vantagens como um filtro e cores para os tipos de pacotes.


Aqui está o wireshark em ação:



Wireshark


Com essas ferramentas em mãos você pode resolver problemas de conexão (ou falta dela) e outros mais. Para maiores informações leia os manuais de cada aplicação.


InFog

Evaldo Junior

Desenvolvedor web, palestrante, escritor e usuário e contribuidor do Software Livre.

comments powered by Disqus