tcpdump: monitorando mais de uma porta (e outros filtros úteis)
Como capturar o tráfego de várias portas com um único tcpdump, e os filtros que mais ajudam no dia a dia de quem investiga problema de rede em servidor Linux.
Olá pessoal, tudo bem?
A dica de hoje é rápida e simples. Para acompanhar a comunicação entre um servidor e outro, pelas portas que determinadas aplicações usam, no Linux é muito fácil: o tcpdump já resolve.
Mas, para cada porta que eu precise monitorar, ou para cada IP do servidor, eu preciso abrir um tcpdump diferente?
Não! Dá para fazer tudo em um único comando.
Várias portas no mesmo comando
# tcpdump -i any -nn 'port 80 or port 8080'
-i any: escuta em todas as interfaces do servidor de uma vez, o que resolve a questão de "um tcpdump por IP";-nn: mostra IPs e portas em números, sem tentar resolver nomes. A saída fica mais rápida e mais fácil de ler;'port 80 or port 8080': o filtro em si, entre aspas simples para o shell não interferir.
dst port 80 or port 8080 é lido como "(destino na porta 80) ou (qualquer tráfego na porta 8080)". Se a intenção era "destino em qualquer uma das duas", repita a direção: 'dst port 80 or dst port 8080'.
Outros filtros úteis
# uma faixa inteira de portas
tcpdump -i any -nn 'portrange 8000-8100'
# só o tráfego com um servidor específico, em duas portas
tcpdump -i any -nn 'host 10.0.0.5 and (port 80 or port 443)'
# parar sozinho depois de 100 pacotes
tcpdump -i any -nn -c 100 'port 443'
# mostrar o conteúdo dos pacotes em texto (útil para HTTP sem TLS)
tcpdump -i any -nn -A 'port 80'
Salvando para analisar com calma
Em vez de ler tudo passando na tela, dá para gravar a captura num arquivo e abrir depois no Wireshark, que tem filtros e gráficos muito mais confortáveis:
# grava em arquivo
tcpdump -i any -nn -w captura.pcap 'port 80 or port 8080'
# lê o arquivo depois, no próprio terminal
tcpdump -nn -r captura.pcap
-c ou com um filtro bem específico. Um tcpdump sem filtro, gravando em disco num servidor movimentado, enche o disco rápido.
E em containers e Kubernetes?
O tcpdump continua valendo, só muda onde você roda. A imagem do container normalmente não tem o tcpdump instalado (e nem deveria), então a saída é entrar na rede do pod com um container de debug:
$ kubectl debug -it meu-pod --image=nicolaka/netshoot --profile=netadmin -- tcpdump -i any -nn 'port 8080'
O kubectl debug cria um container temporário que compartilha a rede do pod. Ele já vem com tcpdump e várias outras ferramentas de rede, e some quando você sai. O --profile=netadmin dá a ele as permissões de rede que a captura precisa. Em clusters com políticas de segurança mais rígidas, pode ser preciso liberar isso antes.
E se a ideia é observar o tráfego de vários processos ou da máquina inteira, sem capturar pacote por pacote, vale conhecer o eBPF, que mostrei neste post.
Considerações Finais
O tcpdump é daquelas ferramentas que existem há décadas e continuam resolvendo. Um único comando, com -i any e um filtro bem escrito, substitui vários terminais abertos. E aprender os filtros vale o tempo, porque a mesma sintaxe também é usada no Wireshark.
Abraço e até a próxima.
:wq!
Post publicado originalmente em maio de 2016 e atualizado em novembro de 2026.
Comentários
Postar um comentário