Ho lavorato su un modo per avere un router OpenWRT log richieste di probe WiFi a un db MySQL (memorizza l'indirizzo MAC e le informazioni RSSI per ogni pacchetto di richiesta sonda insieme ad altri router specifici dati).Pacchetti WiFi di analisi (libpcap)
Dopo la ricerca di libpcap un bel po ', sono stato in grado di mettere insieme un piccolo programma di base che annusa semplicemente i pacchetti su un'interfaccia monitor (mon0) usando un'espressione di filtro ('wlan sottotipo probe-req') e poi stampe fuori i pacchetti grezzi in esadecimale. Con le informazioni disponibili online su libpcap questa parte era abbastanza semplice.
Ora è qui che sono bloccato: Come analizzare il pacchetto WiFi per recuperare le informazioni che sto cercando (indirizzo RSSI e indirizzo MAC di origine)?
Per essere chiari, non sto chiedendo il codice per farlo (anche se non mi lamento se si desidera fornire alcuni: D). Sto solo cercando una sorta di guida per capire quale byte è - una roadmap del pacchetto WiFi, se vuoi.
Ci sono alcuni buoni tutorial per l'analisi dei pacchetti che arrivano via ethernet, ma non sono stato in grado di trovare nulla che possa aiutare con le intestazioni di analisi spcifically relative al WiFi. Presumo che sarà un processo piuttosto semplice: basta prendere i byte rilevanti per RSSI e source MAC - ma ancora una volta, non sono stato in grado di trovare alcuna documentazione su quale byte è quale.
So che questo è stato fatto prima ma sarò onesto: sono completamente perso quando si guarda attraverso il codice sorgente per tcpdump.
Quindi, qualcuno sa di una buona risorsa per l'analisi dei pacchetti WiFi?
Acclamazioni
EDIT: Più risposta specifica
RSSI si trova nell'intestazione RadioTap (beh, su Linux è). Estrarre l'RSSI dal pacchetto è abbastanza semplice usando radiotap-parser.c insieme ai file da cui dipende (trovato nella stessa directory del file a cui mi sono collegato). Se qualcuno ha problemi con l'uso delle funzioni radiotap-parser.c, sentitevi liberi di mettervi in contatto.
Tirando l'indirizzo MAC sorgente è reso abbastanza facile dalle funzioni radiotap perché la struct intestazione radiotap contiene la lunghezza dell'intestazione radiotap (it_len
), che è variabile. Poiché sto analizzando solo le richieste di probe, che hanno una lunghezza fissa (vedere la pagina 17 here), è solo questione di creare un puntatore che punta a packet + it_len + 10
(l'indirizzo MAC di origine inizia 10 byte dopo l'inizio del frame MAC, che inizia dove termina l'intestazione del radiotap). I 6 byte che iniziano da quel puntatore sono addr2
nel frame 802.11 (di nuovo, vedere pagina 17 here).
collegamento radiotap-parser.c è rotto. – haccks