O Wireshark se destaca como um analisador de pacotes de rede de alto nível, compatível com Linux, Windows e macOS. Embora seus filtros ofereçam grande flexibilidade e sofisticação, podem ser um tanto complexos no início. Exploraremos os detalhes cruciais que você precisa conhecer.
Análise de Pacotes em Profundidade
O Wireshark é uma ferramenta excepcional de código aberto, reconhecida mundialmente por profissionais e entusiastas para investigar e solucionar problemas de rede. Desenvolvedores o empregam para identificar falhas em processos de comunicação, enquanto especialistas em segurança o utilizam para analisar atividades maliciosas em redes.
O processo comum é iniciar o Wireshark no modo de Captura para registrar o tráfego em uma das interfaces de rede. Os pacotes são exibidos em tempo real, e a análise detalhada ocorre após a captura.
Os pacotes capturados, chamados de “rastreamento”, podem ser explorados individualmente. É possível inspecionar cada pacote em detalhes, mapear as interações entre dispositivos e usar filtros para selecionar ou remover pacotes da análise.
A funcionalidade de filtragem do Wireshark é notável por sua flexibilidade e precisão. No entanto, sua sintaxe pode ser um tanto sutil, o que pode levar a resultados inesperados se não for bem compreendida.
Dominar a arte dos filtros no Wireshark é essencial para aproveitar ao máximo o potencial do software.
Instalando o Wireshark
Durante a instalação do Wireshark, você será questionado sobre a permissão para usuários sem privilégios de root capturarem rastros de rede. Embora recusar possa parecer uma opção segura, executar o Wireshark exclusivamente com privilégios de root implica que todos os seus componentes operarão com permissões elevadas.
Considerando que o Wireshark é composto por mais de dois milhões de linhas de código e interage diretamente com o sistema, recomenda-se que o mínimo possível de código seja executado com privilégios elevados, especialmente em níveis tão baixos.
É mais seguro executar o Wireshark com uma conta de usuário regular, restringindo o acesso apenas aos membros do grupo “wireshark”. Isso requer algumas etapas adicionais de configuração, mas garante uma operação mais segura. Assim, somente os componentes de captura de dados do Wireshark necessitarão de privilégios elevados.
Para iniciar a instalação no Ubuntu, execute:
sudo apt-get install wireshark
No Fedora, utilize:
sudo dnf install wireshark

Em Manjaro, o comando é:
sudo pacman -Syu wireshark-qt

Durante a instalação, confirme que você não deseja executar o Wireshark como root. Use a tecla Tab para selecionar <ok> e pressione a barra de espaço.

Na próxima tela, use Tab para selecionar <yes> e pressione a barra de espaço.

Para executar o Wireshark, você precisa ser membro do grupo “wireshark”, criado durante a instalação. Isso garante que apenas usuários autorizados tenham acesso ao software.
Para adicionar-se ao grupo, execute:
sudo usermod -a -G wireshark $USER
Para aplicar a nova configuração, faça logout e login novamente ou use:
newgrp wireshark
Para verificar se você pertence ao grupo, execute:
groups

A lista de grupos deve incluir “wireshark”.
Iniciando o Wireshark
Para iniciar o Wireshark, utilize o seguinte comando, com o “&” para executá-lo em segundo plano, permitindo que você use o terminal livremente:
Wireshark &

A interface do Wireshark exibirá seus dispositivos de rede, junto com alguns pseudo-dispositivos.

Uma linha ondulada ao lado de uma interface indica atividade, enquanto uma linha plana indica inatividade. No exemplo, “enp0s3”, que representa a conexão cabeada, apresenta atividade.
Para iniciar a captura de pacotes, clique com o botão direito em “enp0s3” e selecione “Iniciar captura” no menu.

É possível definir filtros de captura, mas é recomendável capturar tudo inicialmente e filtrar na análise, garantindo que nenhum evento relevante seja perdido. Contudo, para redes de tráfego intenso, a filtragem na captura é recomendada.
É crucial observar que a sintaxe dos filtros de captura difere da dos filtros de exibição.

Os ícones destacados na imagem indicam:
- Barbatana de tubarão (azul): Inicia a captura de pacotes. Fica cinza enquanto a captura está ativa.
- Quadrado (vermelho): Interrompe a captura em andamento. Fica cinza quando não há captura ativa.
- Barbatana de tubarão com seta circular (verde): Interrompe o rastreamento, permitindo salvá-lo ou descartá-lo. Fica cinza quando não há captura ativa.
Analisando o Rastreamento
Clique no ícone quadrado vermelho para interromper a captura e analisar os pacotes. Eles são exibidos por ordem de tempo, com cores que indicam o protocolo, e os detalhes do pacote selecionado são mostrados nos painéis inferiores.

Para facilitar a leitura, o Wireshark pode mostrar nomes significativos para os endereços IP. Vá em Exibir > Resolução de nomes e selecione “Resolver endereços de rede”. Isso não funcionará para todos os dispositivos, mas tornará a análise mais clara.

Ao mover a tela para a esquerda, mais colunas aparecem à direita. A coluna “Informações” mostra dados importantes do pacote. No exemplo, temos requisições e respostas de ping.

O Wireshark exibe pacotes na ordem de captura, mas pode haver pacotes de diversas conversas misturados. Para analisar uma conversa específica, isole-a por protocolo. O protocolo aparece na coluna “Protocolo”. A maioria será da família TCP/IP. Você pode usar o protocolo exato ou “Ethernet” como um filtro mais amplo.
Clique com o botão direito em um pacote e escolha “Filtro de conversa” > “Ethernet”. No exemplo, selecionamos um pacote de ping.

A sequência de pacotes agora é exibida isolada, pois o Wireshark gerou automaticamente um filtro. Ele aparece na barra de filtro em verde, indicando que a sintaxe está correta.
Para limpar o filtro, clique em “X” na barra de filtro.
Criando seus Próprios Filtros
Vamos usar um filtro na barra de filtros:
ip.addr == 192.168.4.20
Isso seleciona pacotes enviados ou recebidos pelo dispositivo com IP 192.168.4.20. Note os dois sinais de igual (==) juntos.

Para ver pacotes enviados por um dispositivo (origem), use ip.src; para ver pacotes recebidos por um dispositivo (destino), use ip.dst:
ip.dst == 192.168.4.20 && ip.src == 192.168.4.28

O “&&” indica o “e” lógico. Este filtro mostra pacotes que chegaram em 192.168.4.20, enviados por 192.168.4.28.
Iniciantes em filtros do Wireshark podem achar que um filtro como este mostra todos os pacotes entre dois IPs, o que não é verdade.
Ele filtra todos os pacotes de ou para o IP 192.168.4.20, independentemente da origem ou destino, e também faz o mesmo para pacotes de ou para 192.168.4.28. Essencialmente, ele filtra o tráfego de e para ambos os IPs.
Você também pode filtrar por protocolo. Por exemplo, para requisições HTTP:
http.request

Para excluir pacotes de/para um dispositivo, use “!” e coloque o filtro entre parênteses:
!(ip.addr == 192.168.4.14)
Este filtro exclui todos os pacotes enviados para ou de 192.168.4.14.

É um pouco contra-intuitivo, pois o filtro usa o operador de igualdade (==). Você poderia esperar usar algo como:
ip.addr !=192.168.4.14
Mas isso não funcionará.
Você também pode procurar strings dentro dos pacotes, usando o protocolo. Este filtro busca pacotes TCP com a string “youtube”:
tcp contains youtube

Um filtro que procura retransmissões é útil para verificar problemas de conectividade. Retransmissões são pacotes reenviados porque foram danificados ou perdidos. Muitas retransmissões indicam problemas de conexão ou um dispositivo lento.
Use o filtro:
tcp.analysis.retransmission

Início, Vida, Fim e Criptografia
Uma conexão entre dois dispositivos começa quando um envia um pacote SYN (sincronizar). O receptor responde com um pacote ACK (reconhecimento), e envia um SYN para aceitar a conexão.
SYN e ACK são, na verdade, dois sinalizadores dentro do mesmo pacote. O dispositivo original confirma o SYN enviando um ACK. Os dispositivos estabelecem uma conexão de rede.
Esse processo é chamado de “handshake de três vias”:
A -> SYN -> B
A ACK -> B
Na imagem abaixo, o computador “nostromo.local” inicia uma conexão SSH com “ubuntu20-04.local”. O handshake é o início dessa comunicação. As linhas com pacotes SYN são codificadas em cinza escuro.

Ao rolar a tela para a direita, você verá os pacotes SYN, SYN/ACK e ACK.

Você notará a alternância entre os protocolos TCP e SSH. Os dados são passados pela conexão SSH criptografada, e pacotes de mensagens (como ACK) são enviados via TCP. Em seguida, vamos filtrar os pacotes TCP.
Quando a conexão não é mais necessária, ela é encerrada, com um “handshake de quatro vias”.
Um lado envia um pacote FIN (finalização). O outro responde com um ACK e envia um FIN. O primeiro lado envia um ACK, e a conexão é encerrada.
Veja como é o handshake de quatro vias:
A -> FIN -> B A ACK -> B
Às vezes, o FIN é incluído em um pacote ACK que seria enviado de qualquer maneira:
A -> FIN, ACK -> B
A ACK -> B
É o que acontece neste exemplo.

Para ver apenas o tráfego SSH dessa conversa, use o filtro:
ip.addr == 192.168.4.25 && ssh
Isso filtra o tráfego SSH de e para o IP 192.168.4.25.

Outros Filtros Úteis
Ao digitar um filtro na barra, ele permanecerá vermelho até que a sintaxe esteja correta. Ele ficará verde quando estiver correto.
Se você digitar um protocolo (tcp, ip, udp ou ssh) seguido por um ponto (.), um menu será exibido com filtros recentes e campos que podem ser usados em filtros para esse protocolo.
Por exemplo, com “ip”, você pode usar ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host e outros.
Use os seguintes modelos de filtro como base:
- Para mostrar pacotes HTTP:
http - Para mostrar pacotes DNS:
dns - Para pacotes TCP com porta 4000 (origem ou destino):
tcp.port==4000 - Para pacotes de redefinição TCP:
http.request - Para filtrar ARP, ICMP e DNS:
!(arp ou icmp ou dns) - Para exibir retransmissões:
tcp.analysis.retransmission - Para filtrar sinalizadores (SYN ou FIN): Use um valor de comparação: 1 para sinalizador ativo e 0 para inativo. Exemplo:
tcp.flags.syn == 1
Exploramos princípios e usos fundamentais dos filtros de exibição, mas há muito mais a descobrir.
Para aprofundar seu conhecimento, consulte a referência online do Wireshark.