1. Cos’è Wireshark e come funziona la cattura
Wireshark è il packet analyzer (o sniffer) più usato al mondo. Permette di catturare il traffico di rete in tempo reale e di analizzarlo frame per frame, ricostruendo ogni protocollo — dal livello fisico fino all’applicazione. È uno strumento fondamentale sia per la difesa (troubleshooting, monitoraggio) che per l’attacco (intercettazione credenziali su HTTP, analisi di malware).
1.1 Modalità di cattura
La scheda di rete accetta solo i pacchetti destinati a lei (MAC unicast, broadcast, multicast del suo gruppo). È la modalità predefinita. Wireshark cattura solo il traffico del tuo host.
La scheda accetta tutti i frame sul segmento, indipendentemente dal MAC destinazione. Wireshark vede il traffico di altri host (in reti hub o se sei sulla stessa VLAN del target). Richiede permessi di amministratore. In reti switched non basta da sola.
Su una rete con switch, ogni porta riceve solo il suo traffico unicast. Per analizzare il traffico di altri host, si usa: port mirroring/SPAN (lo switch copia il traffico su una porta di monitor), un TAP di rete (dispositivo hardware passivo), o un attacco ARP poisoning (che forza il traffico attraverso il tuo host — etico solo in lab).
1.2 Il formato .pcap e .pcapng
Un file .pcap è una sequenza di pacchetti catturati con un header globale (versione, link type, snap length). Ogni pacchetto ha un header (timestamp, lunghezza originale, lunghezza catturata) seguito dai byte grezzi del frame.
2. L’interfaccia di Wireshark
L’interfaccia di Wireshark è divisa in tre pannelli principali e una toolbar di controllo:
Schema rappresentativo dell’interfaccia Wireshark con un pacchetto DNS reale analizzato
3. I filtri — il cuore dell’analisi
In una cattura reale possono esserci decine di migliaia di pacchetti al secondo. Senza filtri non si riesce a trovare nulla. Wireshark ha due tipi di filtri, con sintassi completamente diversa:
Applicati prima della cattura. Wireshark scarta i pacchetti che non corrispondono al filtro — non entrano neanche nel file .pcap. Usa la sintassi Berkeley Packet Filter (BPF). Più efficienti: riducono overhead CPU e dimensione file.
# Solo traffico porta 80 tcp port 80 # Solo traffico da/per un host host 192.168.1.10 # Solo DNS udp port 53 # Escluidi traffico broadcast ARP not arp and not broadcast # HTTP e HTTPS tcp port 80 or tcp port 443
Applicati dopo la cattura, sulla vista. I pacchetti restano nel file ma vengono nascosti se non corrispondono. Sintassi più ricca: puoi filtrare su qualsiasi campo di qualsiasi protocollo. Barra in cima all’interfaccia.
# Solo DNS dns # Solo HTTP (non HTTPS) http # Solo richieste GET http.request.method == "GET" # TCP con flag SYN tcp.flags.syn == 1 # Pacchetti da IP specifico ip.src == 192.168.1.10 # Errori TCP (RST) tcp.flags.reset == 1
3.1 Filtri di visualizzazione avanzati
| Filtro | Cosa mostra | Caso d’uso |
|---|---|---|
dns.qry.name contains "google" | Query DNS con “google” nel nome | Tracciare richieste verso un dominio |
http.response.code == 404 | Risposte HTTP 404 | Directory brute-force detection |
tcp.analysis.retransmission | Ritrasmissioni TCP | Problemi di rete, jitter |
http.cookie contains "session" | Richieste HTTP con cookie di sessione | Session hijacking analysis |
ip.addr == 10.0.0.1 | Tutto il traffico da/per quell’IP | Analisi di un host specifico |
tcp.port == 4444 | Traffico su porta 4444 | Rilevare reverse shell Metasploit |
frame.time_relative > 5 | Pacchetti dopo 5 secondi dall’inizio | Analisi temporale |
!(arp or dns or icmp) | Tutto tranne ARP, DNS, ICMP | Eliminare rumore di fondo |
3.2 Operatori nei filtri
== uguale!= diverso> maggiore< minorecontains contienematches regexand / &&or / ||not / !xor( ) parentesi
Ctrl+G → go to pkt
Ctrl+↓ → next match
Ctrl+E → edit packet
Ctrl+M → mark packet
4. Analisi pratica: riconoscere i protocolli
4.1 Analizzare una query DNS
Filtra con dns. Ogni risoluzione è composta da almeno due pacchetti: query (tipo A, dal client) e response (con l’IP, dal server).
In un attacco DNS spoofing, vedresti due risposte per la stessa query (Transaction ID uguale): quella legittima e quella falsa dell’attaccante, che arriva prima. Wireshark segnalerebbe con colori diversi o duplicate answer. In un attacco di DNS tunneling (usato da malware per esfiltrare dati), vedresti query DNS anomale con sottodomini molto lunghi o ricchi di base64.
4.2 Analizzare il TCP Three-Way Handshake
Filtra con tcp.flags.syn == 1 or tcp.flags.fin == 1 or tcp.flags.reset == 1 per vedere solo i pacchetti di controllo della connessione.
| # | Source | Dest. | Flags | Seq | Ack | Significato |
|---|---|---|---|---|---|---|
| 1 | 192.168.1.10:54132 | 93.184.216.34:443 | SYN | 0 (ISN) | — | Client richiede connessione |
| 2 | 93.184.216.34:443 | 192.168.1.10:54132 | SYN-ACK | 0 (ISN server) | 1 | Server accetta, conferma |
| 3 | 192.168.1.10:54132 | 93.184.216.34:443 | ACK | 1 | 1 | Client conferma → connesso |
Un RST (Reset) al posto del SYN-ACK significa che la porta è chiusa o bloccata da firewall. Un grande numero di SYN senza completare l’handshake è segnale di un SYN flood attack (DDoS). Un RST in mezzo a una connessione attiva può indicare un firewall stateful che ha resettato la sessione, o un tool come hping3 in un test.
4.3 Follow TCP Stream — ricostruire la conversazione
La funzione più potente di Wireshark per l’analisi applicativa. Click destro su un pacchetto TCP → Follow → TCP Stream. Wireshark ricostruisce la conversazione completa, mostrando dati inviati (rosso) e ricevuti (blu).
L’esempio sopra mostra cosa si vede usando Follow TCP Stream su traffico HTTP in chiaro: username e password perfettamente leggibili. Su HTTPS, invece di testo, vedresti solo dati cifrati incomprensibili. Questo è il motivo per cui HTTP è considerato insicuro per qualsiasi dato sensibile.
5. Funzionalità avanzate utili
5.1 Statistics — panoramica del traffico
| Menu → Statistics | Cosa mostra | Quando usarlo |
|---|---|---|
| Protocol Hierarchy | Distribuzione del traffico per protocollo (%) | Capire quali protocolli dominano la cattura |
| Conversations | Elenco flussi TCP/UDP con byte e pacchetti | Trovare host che trasmettono molto |
| Endpoints | Lista IP con traffico totale | Identificare host anomali / C&C |
| IO Graphs | Grafico traffico nel tempo | Visualizzare spike (DDoS, download) |
| TCP Stream Graph → RTT | Round-trip time nel tempo | Diagnosi latenza |
| HTTP → Requests | Lista URI richiesti | Web recon, directory enumeration |
5.2 Esportare dati
Estrae automaticamente file trasferiti via HTTP, SMB, FTP, TFTP. Se catturi traffico HTTP con un file binario (malware, immagine, documento), puoi estrarlo direttamente.
Salva solo i pacchetti filtrati in un nuovo .pcap. Utile per creare file di esempio per analisi successive o per condividere solo il traffico rilevante.
5.3 tshark — Wireshark da riga di comando
Per catturare su server remoti (senza GUI) o per automatizzare l’analisi in script:
# Cattura su interfaccia eth0, salva in file tshark -i eth0 -w /tmp/capture.pcap # Leggi file esistente, applica filtro display tshark -r capture.pcap -Y "http.request.method == POST" # Estrai campi specifici tshark -r capture.pcap -T fields -e ip.src -e http.host -e http.request.uri # Cattura solo DNS e stampa nome query tshark -i eth0 -Y dns -T fields -e dns.qry.name # Statistiche protocolli tshark -r capture.pcap -qz io,phs
- Wireshark cattura pacchetti tramite libpcap/Npcap. La modalità promiscua cattura tutto il traffico sul segmento, non solo il tuo
- I filtri di cattura (BPF) riducono il traffico acquisito; i filtri di visualizzazione filtrano la vista su pacchetti già catturati — sintassi diversa, usi complementari
- Follow TCP Stream ricostruisce la conversazione applicativa: su HTTP in chiaro espone credenziali e cookie; su HTTPS mostra solo dati cifrati
- Il TCP handshake visibile in Wireshark (SYN/SYN-ACK/ACK) permette di calcolare RTT, rilevare RST anomali, identificare port scan e SYN flood
- tshark è la versione CLI: indispensabile su server remoti, per automazione e per script di analisi su larga scala