Tcpdump – Capturar e analisar tráfego de rede no Linux

Tcpdump

O tcpdump é uma excelente ferramenta para realizar captura e análise de pacotes de rede, recomendada para profissionais que precisem realizar monitoramento e manutenção em uma rede de computadores, além de estudantes que queiram entender a fundo o funcionamento da pilha de protocolos TCP/IP. O site oficial do tcpdump, e também da biblioteca libpcap (sobre o qual ele é baseado), é o www.tcpdump.org.
O tcpdump, que é software livre, roda na linha de comandos, estando disponível em diversos sistemas operacionais, como Linux, BSD, OS X, AIX e outros. Ele faz uso da biblioteca libpcap para realizar a captura de pacotes, e existe uma versão da ferramenta para Windows, chamada de WinDump, que usa a biblioteca WinPcap. Neste artigo vamos nos focar no tcpdump em si, usando para isso um sistema Linux (Ubuntu; qualquer outro sistema Linux irá servir para testar os exemplos mostrados).

Para executar o tcpdump precisaremos de privilégios de administrador no sistema.

Instalação
Para instalar o tcpdump no Ubuntu Linux, ou em sistemas baseados em Debian, use o comando a seguir no terminal:
sudo apt-get install tcpdump

Sintaxe:

tcpdump [opções]

Opções principais:

-i interface
 Especificar a interface de rede a partir da qual o tráfego será capturado. Se for usado o parâmetro any, o programa irá capturar pacotes em todas as interfaces ativas na máquina.
-c num
Sair após capturar num pacotes
-D
Mostrar uma lista das interfaces de rede no sistema que estão disponíveis e nas quais o tcpdump pode capturar pacotes.
-n
Não realizar a resolução de nomes
-r arquivo
Ler os pacotes a partir de arquivo, o qual foi criado anteriormente com a opção -w
-w arquivo
Escrever os pacotes em arquivo, emvez de mostrá-los formatados na saída padrão
-X
Mostrar o conteúdo do pacote em Hexadecimal e ASCII; se for usado -XX, também mostrará o cabeçalho Ethernet.
src IP/Nome
Capturar pacotes originados apenas do host com o IP ou hostname especificado.
dst IP/Nome
Capturar pacotes destinado apenas ao host com o IP ou hostname especificado.
greater BYTES, > BYTES
Capturar apenas pacotes que sejam maiores que BYTES
less BYTES, < BYTES
Capturar apenas pacotes que sejam menores que BYTES
port NUM
Trabalhar com pacotes destinados ou originados de uma porta específica NUM
portrange A-B
Capturar pacotes cujas portas estejam no intervalo entre A e B.
A and B
Capturar os pacotes somente se satisfizerem às condições A e B simultaneamente
A or B
Capturar os pacotes se satisfizerem à condição A ou à condição B, ou a ambas
not A
Capturar os pacotes que não satisfaçam à condição A.
-v
Produzir uma saída ligeiramente mais verbosa. Algumas informações adicionais são exibidas, tais como os valores dos campos TTL, Identificação, Comprimento Total e Opções do pacote IP.
-vv
Saída mais verbosa do que a opção -v. Por exemplo, pacotes SMB são completamente decodificados.

Exemplos de uso:

1. Capturar somente o tráfego a partir da interface eth0:
sudo tcpdump -i eth0

2. Gravar os pacotes capturados em um arquivo de nome captura.cap:
sudo tcpdump -w captura.cap

3. Ler os pacotes capturados a partir do arquivo captura.cap:
sudo tcpdump -r captura.cap

4. Capturar somente o tráfego associado ao protocolo ICMP, na interface eth0:
sudo tcpdump -i eth0 icmp

5. Capturar somente o tráfego associado ao protocolo ARP, na interface eth0:
sudo tcpdump -i eth0 arp

Tcpdump capturando pacotes ARP no Ubuntu Linux

6. Capturar somente 50 pacotes a partir da interface eth0:
sudo tcpdump -c 50 -i eth0

7. Mostrar os pacotes capturados tanto em ASCII quanto em HEX, incluindo cabeçalho Ethernet:
sudo tcpdump -XX -i eth0

tcpdump com opção XX hexadecimal e ASCII

8. Capturar pacotes mostrando IPs em vez de nomes:
sudo tcpdump -n -i eth0

tcpdump com saída numérica

9. Capturar somente pacotes maiores que 100 bytes:
sudo tcpdump -i eth0 greater 100
Neste exemplo, se emitirmos um comando ping a partir de outra janela de terminal, os pacotes não serão capturados, pois são menores que 100 bytes.

10. Capturar somente pacotes destinados à porta 53:
sudo tcpdump -i eth0 port 53

tcpdump na porta 53 DNS
Para testar, abrimos um navegador e acessamos uma página qualquer da Web, como www.bosontreinamentos.com.br

11. Usando filtros de condições: Capturar pacotes que usam o protocolo e cujo endereço de destino seja 64.233.186.121
sudo tcpdump -i eth0 dst 64.233.186.121 and icmp

tcpdump com icmp no Linux
Para testar, abrimos outra janela de terminal e emitimos o comando ping para vários endereços; somente serão capturados pacotes ao ser usado o endereço discriminado no comando. Se abrirmos um navegador e tentarmos acessar esse mesmo endereço (ou o site, www.planetaunix.com.br), os pacotes não serão capturados, por conta do protocolo utilizado (http em vez de icmp), mostrando que ambas as condições (AND) precisam ser satisfeitas para que essa captura tenha efeito.

12. Capturar somente os pacotes ICMP Echo Request enviados pelo programa ping da máquina local, cujo IP é 192.169.1.105, para um endereço remoto, como 8.8.8.8
sudo tcpdump -i eth0 icmp and src 192.168.1.105 and dst 8.8.8.8

tcpdump com endereços de origem e destino, e protocolo ICMP

Existem diversas outras opções e funcionalidades disponíveis no utilitário, e recomendamos uma leitura minuciosa das páginas de manual do tcpdump para aprofundar seus conhecimentos a respeito.

Outras ferramentas muito utilizadas para captura e análise de pacotes são o Wireshark, tshark, WinDump, Ettercap e ngrep, entre outras. Vamos estudar diversas delas em artigos específicos aqui no site, ou em vídeos em nosso Canal do YouTube.

Sobre Fábio dos Reis (1273 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

1 Comentário em Tcpdump – Capturar e analisar tráfego de rede no Linux

  1. José Carlos Batista de Oliveira Junior // 18/12/2017 em 9:57 // Responder

    Obrigado por compartilhar tantos exemplos práticos.

    Abs,

Escreva um comentário

Seu e-mail não será divulgado


*