
Firmware ESP32 che intercetta i pacchetti PROBE REQUEST inviati dagli smartphone in cerca di connessione Wi-Fi per estrarre diversi tipi di informazioni
Questo progetto utilizza Espressif IoT Development Framework (ESP-IDF) ed è stato testato sul modulo ESP-WROOM-32 e su esp-idf v3.2.
Una panoramica dell'intero progetto (ovvero firmware ESP32, server e GUI) è disponibile qui.
Questo firmware è scritto con lo scopo di intercettare i pacchetti Probe Request inviati dagli smartphone che cercano una connessione Wi-Fi. Quando la connessione Wi-Fi è attiva su uno smartphone, questo invierà in broadcast (su tutte le frequenze dei canali) un messaggio di probe request chiedendo se ci sono reti Wi-Fi libere o alcune conosciute (ovvero quelle per cui lo smartphone conosce la password). L'ESP32 lo intercetterà ed estrarrà diversi tipi di informazioni.
Le seguenti informazioni vengono ricavate da ciascun pacchetto intercettato:
Ogni minuto queste informazioni vengono inviate a un server ed elaborate. Infine, è possibile visualizzare le informazioni elaborate (posizione in tempo reale degli smartphone, frequenza degli smartphone, ecc.) tramite una GUI.
Il firmware è composto da due thread/task principali:
Sniffer Task
Wi-Fi Task
lock per gestire la sezione critica per le operazioni di I/O sul file.L'ESP32 è configurato in modalità WIFI_MODE_APSTA: ovvero crea il "soft-AP and station control block" e avvia "soft-AP and station". Grazie a ciò, l'ESP32 è in grado di intercettare e inviare informazioni al server contemporaneamente, evitando di perdere le informazioni dei pacchetti durante l'invio dei dati.
Di seguito è riportato l'elenco completo dei campi informativi che possono essere presenti in un Probe Request (fonte IEEE 802.11-2012):

E qui sotto un pacchetto intercettato con Wireshark in cui è possibile vedere, per ciascun campo, il numero di bit e la loro posizione all'interno del pacchetto:

Questa sezione potrebbe essere obsoleta, consulta il sito ufficiale per maggiori informazioni e per la guida più recente su come iniziare con ESP-IDF.
Configurazione del Toolchain
Ottenere ESP-IDF
Oltre alla toolchain (che contiene i programmi per compilare e creare l'applicazione), sono necessarie anche le API / librerie specifiche per ESP32.
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
Passare alla versione v3.x
cd esp-idf
git checkout release/v3.2
Configurare il percorso per ESP-IDF
I programmi della toolchain accedono a ESP-IDF tramite la variabile d'ambiente IDF_PATH.
Questa variabile deve essere impostata sul tuo PC, altrimenti i progetti non verranno compilati.
Installare i pacchetti Python richiesti
python -m pip install --user -r $IDF_PATH/requirements.txt
Assicurati di aver esportato il percorso
export IDF_PATH=~/esp/esp-idf
export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin
Clonare il repository
git clone https://github.com/ETS-PoliTO/esp32-sniffer.git
cd esp32-sniffer
Stabilire la connessione seriale tra ESP32 e il tuo PC
make menuconfig
Vai su Serial flasher config, poi su Default serial port e imposta la porta a cui è connesso ESP32
Nota che, se stai usando un bridge, probabilmente devi scaricare qualche driver:
Questa fornisce una guida su come stabilire la connessione seriale tra ESP32 e PC.
Compilare il codice e flashare l'ESP32
make all && make flash
Visualizzare i log
make monitor
Il file /main/Kconfig.projbuild contiene due menu diversi:
SPIFFS (SPI Flash File System)
Contiene alcune informazioni importanti sulla partizione SPIFFS:
SPIFFS è un file system che supporta il wear leveling, i controlli di consistenza del file system e altro ancora.
Configurazioni
Contiene diverse variabili:
ESP32_ID: ID dell'ESP32WIFI_SSID: SSID del WiFi (nome della rete)WIFI_PASS: password WiFi (WPA o WPA2)BROKER_ADDR: IP del broker MQTTBROKER_PSW: password del broker MQTTBROKER_PORT: porta del broker MQTTCHANNEL: canale in cui ESP32 intercetterà le PROBE REQUESTSNIFFING_TIME: durata dello sniffingPer configurare le variabili sopra elencate: