
Firmware para ESP32 que captura paquetes PROBE REQUEST enviados por teléfonos inteligentes en busca de conexión Wi-Fi para extraer distintos tipos de información
Este proyecto utiliza Espressif IoT Development Framework (ESP-IDF) y ha sido probado en el módulo ESP-WROOM-32 y esp-idf v3.2.
Puede encontrar una descripción general del proyecto completo (es decir, el firmware del ESP32, el servidor y la GUI) aquí.
Este firmware está escrito con el propósito de capturar paquetes Probe Request enviados por teléfonos inteligentes que buscan una conexión Wi-Fi. Cuando la conexión Wi-Fi está activa en un teléfono inteligente, este enviará en difusión (en todas las frecuencias de canales) un mensaje probe request preguntando si hay alguna Wi-Fi libre o alguna conocida (es decir, el teléfono inteligente conoce la contraseña de esa Wi-Fi). El ESP32 lo capturará y extraerá diferentes tipos de información.
La siguiente información se obtiene de cada paquete capturado:
Después de cada minuto, esta información se envía a un servidor y se procesa. Finalmente, es posible ver la información procesada (ubicación en tiempo real del teléfono inteligente, frecuencia del teléfono inteligente, etc.) a través de una GUI.
El firmware consta de dos hilos/tareas principales:
Tarea Sniffer
Tarea Wi-Fi
lock para gestionar la sección crítica de las operaciones de E/S en el archivo.El ESP32 está configurado en modo WIFI_MODE_APSTA: es decir, crea "soft-AP and station control block" e inicia "soft-AP and station". Gracias a esto, el ESP32 es capaz de capturar y enviar información al servidor al mismo tiempo, evitando perder información de paquetes mientras envía datos.
Aquí está la lista completa de campos de información que pueden estar en un Probe Request (fuente IEEE 802.11-2012):

Y a continuación un paquete capturado con Wireshark en el que puede ver, para cada campo, el número de bits y su posición dentro del paquete:

Esta sección puede estar desactualizada; consulte el sitio oficial para obtener más información y la guía más reciente sobre cómo empezar con ESP-IDF.
Configurar el Toolchain
Obtener ESP-IDF
Además del toolchain (que contiene los programas para compilar y construir la aplicación), también necesitas las API / librerías específicas de ESP32.
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
Cambiar a la versión v3.x
cd esp-idf
git checkout release/v3.2
Configurar la ruta a ESP-IDF
Los programas del toolchain acceden a ESP-IDF mediante la variable de entorno IDF_PATH.
Esta variable debe configurarse en tu PC; de lo contrario, los proyectos no se compilarán.
Instalar los paquetes de Python necesarios
python -m pip install --user -r $IDF_PATH/requirements.txt
Asegúrate de haber exportado la ruta
export IDF_PATH=~/esp/esp-idf
export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin
Clonar el repositorio
git clone https://github.com/ETS-PoliTO/esp32-sniffer.git
cd esp32-sniffer
Establecer la conexión serie entre el ESP32 y tu PC
make menuconfig
Ve a Serial flasher config, luego a Default serial port y establece el puerto en el que está conectado el ESP32
Ten en cuenta que, si estás usando un puente, probablemente necesites descargar algún controlador:
Esto proporciona una guía sobre cómo establecer la conexión serie entre el ESP32 y el PC.
Compilar el código y flashear el ESP32
make all && make flash
Ver los registros
make monitor
El archivo /main/Kconfig.projbuild contiene dos menús diferentes:
SPIFFS (SPI Flash File System)
Contiene información importante sobre la partición SPIFFS:
SPIFFS es un sistema de archivos que admite wear leveling, comprobaciones de consistencia del sistema de archivos y más.
Configuraciones
Contiene diferentes variables:
ESP32_ID: ID del ESP32WIFI_SSID: SSID del WiFi (nombre de la red)WIFI_PASS: contraseña del WiFi (WPA o WPA2)BROKER_ADDR: IP del broker MQTTBROKER_PSW: contraseña del broker MQTTBROKER_PORT: puerto del broker MQTTCHANNEL: canal en el que el ESP32 capturará PROBE REQUESTSNIFFING_TIME: tiempo de capturaPara configurar las variables anteriores: