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:
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