Wireshark e tshark no Linux: capture pacotes sem root
|

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

  1. Atualize a lista de pacotes e instale os dois binários:
    sudo apt update
    sudo apt install -y wireshark tshark
  2. 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 wireshark e ajusta a permissão do dumpcap. 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.

  1. Confirme que o grupo foi criado e adicione seu usuário a ele:
    getent group wireshark
    sudo usermod -aG wireshark $USER
  2. Saia e entre de novo na sessão (ou rode newgrp wireshark no terminal atual) para o novo grupo valer.
  3. Confirme que o dumpcap tem 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 do dpkg-reconfigure.

  4. 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

  1. Liste as interfaces e identifique a que importa (normalmente eth0, ens18 ou similar):
    tshark -D
  2. 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
  3. 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.

  4. 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.

Gostou? Compartilhe.

Posts Similares

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *