Primeiramente, baixe o Wireshark, em Linux use o apt-get, em Windows baixe nesse link: https://www.wireshark.org/#download
PS: É provável que a versão do Npcap do Windows que vem com o Wireshark esteja desatualizada, se for o caso baixe aqui: https://nmap.org/npcap/#download
Nele, vemos primeiramente as placas de rede disponíveis no nosso computador. Clique nela, e veremos todas as atividades da nossa rede, abra o navegador com o programa aberto para vermos a atividade.
A barbatana do tubarão inicia a captura de pacotes, para parar clique no quadrado vermelho. Vemos os IPs de origem (source) e destino, protocolos e outros dados. Abaixo dele tem os dados do pacote, como os MACs de destino e outros dados. Para ver os dados de um determinado IP, clique nele.
Podemos ver por exemplo, no filtro, os pacotes de um determinado protocolo, por exemplo, o ARP.
Podemos salvar o arquivo de análise também e ver em outro computador.
PS: Podemos por exemplo, dar um ping na linha de comando do sistema e analisar os requests e replys deste.
Numa rede baseada em switches, só poderemos capturar tráfego direcionado à nossa máquina, broadcasts e alguns multicasts. Dá pra configurar isso no switch com o espelhamento de portas, que copia o tráfego para a porta da sua estação. Um estouro de tabela MAC do switch também pode fazer ele entrar em modo broadcast.
Para pegar apenas informações de um determinado IP, digitamos no filtro ip.addr == 192.168.0.1 (substituindo pelo IP desejado), para ver os resultados desse IP de uma cor destacada.
Para vermos apenas resultados com esse determinado IP de origem, digitamos ip.src == 192.168.0.1, e pegar esse IP de destino, digite ip.dst == 192.168.0.1.
Para colocar algo que queremos que não seja exibido, usamos o mesmo filtro, mas com um ponto de exclamação, que significa negação, por exemplo !(ip.addr == 192.168.0.1).
Para não mostrar tráfegos de um determinado protocolo, podemos usar por exemplo not tcp, para mais de um podemos ser por exemplo not tcp and not arp. Como visto, podemos colocar operadores como and, or e not também, tanto com o nome literal quanto no padrão C (&&, || e !).
Podemos filtrar um determinado protocolo usando os comandos como por exemplo tcp.port == 80 para filtrar o tráfego HTTP (podendo nesse caso ser diretamente pesquisado apenas http também). Outros filtros podem ser usados (inclusive com negação), para protocolos como FTP, SSH, entre outros.
Clique com o botão direito em um dos pacotes e em Follow e TCP Stream, você terá acesso ao código binário do programa. Se permitido, teremos outras opções disponíveis, como UDP Stream e TLS Stream.
Para usar o Tshark via linha de comandos, usamos dessa forma:
tshark -D # Mostra as interfaces
tshark -i NomeDaInterface "tcp port 80" # Usamos um filtro igual na interface gráfica
tshark -i NomeDaInterface -w arquivo.pcapng # Salva num arquivo
tshark -r arquivo.pcapng # Lê um arquivo no terminal
Podemos usar vários filtros, inclusive em conjunto, por exemplo:
tshark -r arquivo.pcapng "http"
Veja alguns exemplos de filtros que podemos usar no Wireshark e no Tshark:
ip.addr == 192.168.0.1 # Mostra tráfego envolvendo esse IP
tcp # Apenas pacotes TCP
udp # Apenas pacotes UDP
dns # Apenas consultas/respostas DNS
# Filtros por porta:
tcp.port == 80 # Tráfego HTTP
tcp.port == 443 # Tráfego HTTPS
udp.port == 53 # DNS
# Filtros por protocolo:
http # Tráfego HTTP
tls # Tráfego criptografado (HTTPS)
icmp # Ping (ICMP)
# Filtros mais específicos:
ip.src == 192.168.0.10 # Origem específica
ip.dst == 8.8.8.8 # Destino específico
tcp.flags.syn == 1 # Pacotes de início de conexão (SYN)
http.request.method == "GET" # Apenas requisições GET, dá pra fazer com POST também
# Combinar filtros:
tcp.port == 80 && ip.addr == 192.168.0.5
Temos alguns filtros mais avançados:
# Segurança:
tcp.flags.reset == 1 # Conexões sendo resetadas (possível problema ou bloqueio)
tcp.analysis.retransmission # Pacotes retransmitidos (rede lenta/perda)
dns.flags.response == 0 # Apenas requisições DNS (quem está consultando)
ip.addr == 192.168.0.0/24 # Toda uma sub-rede
# Web e aplicações:
http.response.code == 404 # Erros "não encontrado"
http contains "login" # Pacotes HTTP com "login" no conteúdo
tls.handshake.type == 1 # Client Hello (início de conexão TLS)
tls.record.version == 0x0303 # TLS 1.2
# E-mail e transferência:
smtp # Tráfego de e-mail (SMTP)
ftp # FTP (transferência de arquivos)
imap # Acesso a e-mail via IMAP
# Rede local e dispositivos:
arp # Resolução de IP/MAC (ARP)
bootp # DHCP (atribuição de IP)
eth.addr == aa:bb:cc:dd:ee:ff # Filtrar por MAC
# Diagnóstico avançado:
frame.len > 1000 # Pacotes grandes
tcp.window_size < 100 # Possível gargalo de janela TCP
icmp.type == 3 # Destino inalcançável
icmp.type == 8 # Echo request (ping enviado)
# Combinações úteis
dns && ip.src == 192.168.1.5 # DNS vindo de um host específico
tcp.port == 443 && ip.dst == 172.217.0.0/16 # HTTPS para um range específico
!(arp || dns) # Excluir tráfego comum “ruído”