Marcio Cunha

Como inspecionar tráfego TCP em tempo real com tcpdump

Aprenda a usar o comando tcpdump na linha de comando para capturar pacotes de rede, filtrar portas específicas e diagnosticar falhas de conectividade com rapidez.

Marcio Cunha•4 min
Também disponível em:EnglishEspañol
Resumo
  • O tcpdump intercepta o tráfego que passa por uma interface de rede no sistema operacional.
  • Filtros de porta evitam o excesso de dados exibidos no terminal durante a análise.
  • A interpretação correta de flags TCP revela problemas como conexões travadas e perda de pacotes.
  • Permissões de superusuário são necessárias para capturar dados brutos diretamente do kernel.
  • Salvar capturas em arquivos compactos permite análises posteriores em ferramentas como Wireshark.

O que é o tcpdump e por que ele é indispensável

Quando uma aplicação falha ao se comunicar com um banco de dados ou uma API externa, o desenvolvedor costuma ficar às cegas sem saber onde o dado se perdeu. Na prática, isso significa que adivinhar a causa de um erro de rede gera perda de tempo preciosa. É exatamente nesse cenário que entra o tcpdump, um utilitário de linha de comando leve e poderoso capaz de interceptar e exibir os pacotes de dados que trafegam pela rede do seu servidor em tempo real.

Diferente de softwares complexos com interface gráfica, o tcpdump roda direto no terminal, o que o torna perfeito para servidores remotos via SSH onde não há telas disponíveis. Ele funciona como uma escuta telefônica para os cabos de rede virtuais ou físicos do seu computador. Para entender a fundo o comportamento das conexões, muitas vezes combinamos essa ferramenta com diagnósticos de portas, como explicamos no guia sobre como usar o comando ss no Linux para auditar conexões de rede, garantindo uma visão completa do tráfego.

Preparando o ambiente e capturando o primeiro pacote

Antes de começar a registrar dados, precisamos identificar qual interface de rede o sistema está utilizando para conversar com o mundo exterior. Em servidores modernos, nomes como eth0 ou enp3s0 são comuns. Como a captura de pacotes exige acesso direto ao hardware ou ao núcleo do sistema operacional, você precisará executar os comandos com privilégios administrativos usando o sudo.

Para realizar uma captura básica e ver os dados brutos passando pela tela, basta executar o comando apontando para a interface desejada. Se quiser aprofundar suas investigações e até como rastrear pacotes perdidos na rede com tcpdump, o domínio desse comando básico é o primeiro passo obrigatório. Veja abaixo como iniciar uma leitura simples na interface padrão:

sudo tcpdump -i eth0

Assim que o comando rodar, você verá uma enxurrada de linhas aparecendo na tela. Cada linha representa um pacote de dados cruzando a placa de rede, contendo endereços IP de origem e destino, portas e o protocolo utilizado. Para interromper a execução, basta pressionar as teclas Ctrl mais C no seu teclado.

Filtrando portas e endereços específicos

Deixar o tcpdump rodando sem filtros em um servidor de produção ativo é como tentar beber água de um incêndio: o volume de informações é avassalador e inútil. Por isso, a verdadeira utilidade do utilitário surge quando aplicamos filtros para isolar apenas o tráfego que nos interessa, como uma porta específica onde nosso microsserviço está escutando.

Se você precisa investigar falhas de comunicação em uma aplicação web rodando na porta 80 ou 443, ou em um banco de dados na porta 5432, você pode instruir o comando a ignorar todo o resto. Para isolar o tráfego de uma porta específica, utilize o seguinte comando no terminal:

sudo tcpdump -i eth0 port 5432

Esse filtro restringe a exibição apenas aos pacotes cuja origem ou destino envolvam a porta do banco de dados PostgreSQL. Dessa forma, fica muito mais fácil enxergar se as requisições estão chegando ao destino e se o servidor está respondendo de volta.

Analisando flags TCP e problemas de conectividade

O protocolo TCP utiliza um sistema de confirmações e controle de fluxo baseado em bandeiras, conhecidas como flags. Quando uma conexão é estabelecida, ocorre o famoso aperto de mãos de três vias, envolvendo os sinais SYN, SYN-ACK e ACK. Compreender essas mensagens ajuda a identificar exatamente onde a conexão está morrendo.

Se você perceber que uma aplicação tenta conversar com outra e recebe apenas pacotes com a flag RST, significa que o destino recusou ativamente a conexão, geralmente porque nenhum serviço está escutando naquela porta. Para visualizar os detalhes dessas flags de forma legível no terminal, adicionamos parâmetros que evitam a tradução demorada de nomes de host:

sudo tcpdump -nnvv -i eth0 tcp port 80

O parâmetro -nn evita que o programa perca tempo tentando converter endereços IP em nomes de domínio, enquanto o -vv aumenta o nível de detalhes exibidos na tela. Essa combinação revela o estado exato das conversas TCP, permitindo isolar gargalos que muitas vezes causam comportamentos inesperados em sistemas distribuídos. Para aprofundar esses conceitos na prática em produção, confira também nossa análise técnica sobre Por que pods sofrem OOM Killed no Kubernetes e como ajustar limites.

Salvando capturas para análise posterior

Muitas vezes, o problema de rede ocorre de forma intermitente e fugaz, tornando impossível analisar a tela do terminal no momento exato da falha. Nestes casos, a melhor estratégia é gravar o tráfego bruto diretamente em um arquivo para posterior inspeção detalhada em ferramentas visuais.

Você pode salvar o resultado da captura em um arquivo com a extensão pcap utilizando o parâmetro de gravação. Para salvar os pacotes da interface em um arquivo seguro, execute o comando abaixo especificando o nome de saída:

sudo tcpdump -i eth0 -w captura_rede.pcap port 443

Esse arquivo gerado pode ser transferido para sua máquina local e aberto em softwares como o Wireshark, permitindo um estudo minucioso de cada byte trafegado. Dominar essa técnica garante autonomia total para solucionar problemas complexos de infraestrutura e redes sem depender de adivinhações.