Table of Contents

Sniffer su ROS

Per sniffare il traffico su ROS usiamo principalmente la funzione /tool/sniffer che ha un sacco di usi possibili. Possiamo sniffare in tempo reale con output (limitato) a video, oppure sniffare salvando in un buffer in RAM oppure in un file (compatibile con Wireshark) oppure ancora possiamo mandare i pacchetti via UDP a una macchina remota per essere visualizzati in realtime con Wireshark.

In ogni caso c'è un limite: non possiamo aprire due sessioni assieme, cioè non possiamo, per esempio, lanciare due sniffer distinti in due finestre uno che sniffa la ether1 e l'altro che sniffa la ether2. Questo qualche volta rende non banale l'analisi di certi problemi. Forse c'è un modo furbo per farlo, ma io su Linux ho sempre lanciato enne volte wireshark assieme senza problemi, qui devo imparare come si può aggirare il limite.

Per gli amanti dell'interfaccia grafica, le funzioni dello sniffer sono sotto il menù "Tools / Packet Sniffer". Notare che la funzione "quick" non credo che sia disponibile in questa modalità.

Sniffer quick (in tempo reale)

Per sniffare il traffico in tempo reale possiamo usare /tool/sniffer/quick con una serie di parametri che definiscono cosa visualizzare e come. Si può filtrare per indirizzo, porte, interfacce, ecc. Il numero di righe visualizzato è basso ma possiamo alzarlo con rows=80. Le colonne sono sempre troppo poche, allargate per quanto possibile la finestra della console per vederne di più.

Sniffer con salvataggio in RAM o su file

Possiamo sniffare il traffico e salvare i dati in RAM e/o su un file per poter poi esportare il tutto e per esempio aprirlo con Wireshark (il formato è il medesimo). Per usare questa funzione forse è più comoda l'interfaccia grafica perché possiamo vedere al volo tutti i parametri impostati, quali filtri, dimensione massima del buffer in RAM, dimensione massima del file (occhio a non riempire il disco), ecc. In ogni caso in command line abbiamo tutti i comandi necessari, dei quali riporto un piccolissimo esempio qui sotto:

Sniffer con trasmissione in tempo reale verso un host remoto

Questo è un trucco che amo perché mi permette di usare wireshark in tempo reale. In pratica lo sniffer applica il filtro che gli imposti localmente (se lo imposti) e manda il traffico dopo il filtro a un host remoto che lo riceve e analizza in tempo reale.

/tool/sniffer
set streaming-server=172.31.255.29
set streaming-enabled=yes 
set filter-interface=ether1
start

Se va tutto bene, vedremo su Wireshark il traffico "come se fosse locale" cioè vedremo il traffico già "decapsulato", anche se guardando i dettagli dei pacchetti vedremo che sono in realtà incapsulati.

Statistiche

Durante lo sniffamento, o anche dopo la fine del medesimo (fino a che non ne iniziamo un altro) possiamo vedere delle statistiche divise per:

Ci sono una marea di opzioni per questi comandi, per scegliere cosa e come vedere, ed esiste anche il comando find per applicare un filtro. Se volete approfondire, cosa che dovrò fare anche io più avanti, giocateci un poco.

Sniffare dalle regole di firewall

Nel firewall è possibile creare delle regole nella sezione "Mangle" che hanno come Action "Sniff TZSP". In questo modo possiamo creare una configurazione che, senza bisogno di sniffare tutto quanto, manda i pacchetti direttamente dal firewall verso il nostro Wireshark in tempo reale.

Limiti dello sniffer

Lo sniffer non "sente" tutto il traffico. Ci sono casi nei quali il traffico non attraversa la CPU del Mikrotik e in questi casi non viene sniffato. Alcuni casi sono:

In alcuni casi è possibile, anche temporaneamente, disabilitare l'offload per permettere di sniffare. In altri casi può essere impossibile perché si affogherebbe la CPU.