Wireshark e tshark no Linux: capture pacotes sem root
Perder pacotes, latência alta ou uma aplicação que trava sem erro no log têm uma coisa em comum: só ficam claros quando alguém olha o tráfego que de fato saiu da interface de rede. O Wireshark (interface gráfica) e o tshark (linha de comando, parte do mesmo projeto, hoje na versão estável 4.6.9) fazem exatamente isso — e dá para configurar os dois para capturar sem precisar de root, o que evita abrir a aplicação gráfica como superusuário só para ver um handshake TCP.
Por que capturar pacotes resolve o que o log não resolve
Um log de aplicação mostra o que o software decidiu registrar. A captura de pacotes mostra o que de fato trafegou pelo fio — isso inclui retransmissões TCP, handshakes TLS incompletos, respostas DNS que vieram do servidor errado e pacotes que saíram da interface mas nunca chegaram ao destino. É a única forma de provar, por exemplo, se uma lentidão é do aplicativo, da rede ou do outro lado da conexão.
A diferença entre Wireshark e tshark é só a interface: o tshark roda em servidor sem X11, grava capturas longas em segundo plano e é a ferramenta certa para automatizar; o Wireshark abre o .pcapng depois e dá a visão gráfica, com os mesmos filtros.
Instale o Wireshark e o tshark no Ubuntu/Debian
- Atualize a lista de pacotes e instale os dois binários:
sudo apt update sudo apt install -y wireshark tshark
- Durante a instalação, o pacote pergunta se usuários sem privilégio de root podem capturar pacotes. Responda Yes — é essa resposta que cria o grupo
wiresharke ajusta a permissão dodumpcap. Se já instalou antes e essa tela não apareceu, reabra-a com:sudo dpkg-reconfigure wireshark-common
Capture sem precisar de root
Rodar o Wireshark como root funciona, mas roda o parser de protocolos — código que processa pacotes vindos da rede, logo não confiável — com privilégio total. Um pacote malformado que explore um bug de parsing vira execução de código como root. O caminho certo é dar ao seu usuário permissão só para capturar, não para administrar o sistema.
- Confirme que o grupo foi criado e adicione seu usuário a ele:
getent group wireshark sudo usermod -aG wireshark $USER
- Saia e entre de novo na sessão (ou rode
newgrp wiresharkno terminal atual) para o novo grupo valer. - Confirme que o
dumpcaptem a capability de captura em vez do bit setuid:getcap /usr/bin/dumpcap
Deve aparecer algo como
cap_net_admin,cap_net_raw=eip. Se vier vazio, refaça o passo anterior dodpkg-reconfigure. - Teste sem
sudo:tshark -D
Deve listar as interfaces disponíveis sem pedir senha e sem erro de permissão.
Filtros: capture filter não é display filter
Esse é o ponto que mais confunde quem começa: Wireshark e tshark têm dois idiomas de filtro diferentes, e usar a sintaxe errada no lugar errado simplesmente não funciona.
- Capture filter (sintaxe BPF) decide o que entra no arquivo antes de ser salvo — é mais rápido e mais limitado. Exemplos:
host 10.0.0.5,port 443,tcp and not port 22. - Display filter (sintaxe própria do Wireshark/tshark) filtra o que já foi capturado, na tela ou ao exportar — é o que se digita na barra do Wireshark. Exemplos:
ip.addr == 10.0.0.5,tcp.port == 443,http.response.code >= 400,tcp.analysis.retransmission.
Regra prática: use capture filter para reduzir volume numa captura longa (por exemplo, só o tráfego de um host); use display filter para investigar depois, porque dá para mudar o filtro sem precisar recapturar.
Capture pela linha de comando com tshark
- Liste as interfaces e identifique a que importa (normalmente
eth0,ens18ou similar):tshark -D
- Capture 500 pacotes de uma interface e grave em arquivo, aplicando um capture filter para não gravar ruído:
tshark -i eth0 -c 500 -f "host 10.0.0.5" -w /tmp/captura.pcapng
- Para uma investigação sem prazo fixo, capture por tempo e com rotação de arquivo — essencial em produção, porque uma captura sem limite enche o disco:
tshark -i eth0 -b duration:300 -b files:5 -w /var/log/captura.pcapng
Isso mantém só os últimos 5 arquivos de 5 minutos, descartando os mais antigos.
- Para ler e filtrar um arquivo já salvo, sem reabrir o Wireshark gráfico:
tshark -r /tmp/captura.pcapng -Y "tcp.analysis.retransmission"
Leve o resultado para o Wireshark gráfico
Qualquer arquivo .pcapng gravado pelo tshark abre direto no Wireshark — não existe conversão. Em servidor sem interface gráfica, grave com tshark e copie o arquivo para a máquina local com scp:
scp usuario@servidor:/tmp/captura.pcapng .
Abra no Wireshark, aplique o display filter e use Statistics → Conversations para ver rapidamente quem trocou mais tráfego com quem, ou Statistics → I/O Graph para localizar o momento exato de um pico de latência.
Perguntas frequentes
Preciso instalar o Wireshark gráfico só para usar o tshark?
Não. O pacote tshark instala sozinho; wireshark (GUI) e tshark são pacotes separados no APT, mas compartilham o mesmo dumpcap e a mesma configuração de permissão.
Dá para capturar tráfego de uma VLAN específica?
Sim, se a interface já receber os pacotes com a tag 802.1Q. Use o display filter vlan.id == 10 para isolar uma VLAN depois de capturar.
O capture filter aceita negação?
Sim, com not ou !. Por exemplo, tcp and not port 22 grava todo o tráfego TCP exceto SSH — útil para não registrar a própria sessão de gerenciamento.
Por que o tshark mostra menos pacotes do que eu esperava?
Confira se a interface está em modo promíscuo (a flag -I do tshark liga isso) e se não há um switch no meio limitando o espelhamento de tráfego que não é seu — em rede comutada, por padrão você só vê o que chega e sai da sua própria porta.
Isso funciona em container Docker?
Dentro do container, só com a capability NET_ADMIN (docker run --cap-add=NET_ADMIN) ou rodando em modo --network host. Sem isso, o container não vê a interface física do host.
Conclusão
Capturar pacotes deixa de ser “ferramenta de emergência rodada como root” e passa a ser parte do diagnóstico de rotina assim que a permissão fica configurada uma vez. Comece testando tshark -D sem sudo; se a lista de interfaces aparecer, o ambiente está pronto para qualquer captura que vier depois — de um teste rápido de 30 segundos a uma rotação de 5 minutos em produção.