
ESP32 फर्मवेयर जो Wi-Fi कनेक्शन की खोज करने वाले स्मार्टफ़ोन द्वारा भेजे गए PROBE REQUEST पैकेट्स को स्निफ़ करके विभिन्न प्रकार की जानकारी निकालता है
यह प्रोजेक्ट Espressif IoT Development Framework (ESP-IDF) का उपयोग करता है और इसे ESP-WROOM-32 मॉड्यूल तथा esp-idf v3.2 पर परीक्षण किया गया है।
पूरे प्रोजेक्ट (अर्थात ESP32 फ़र्मवेयर, सर्वर और GUI) का अवलोकन यहाँ पाया जा सकता है।
यह फ़र्मवेयर उन स्मार्टफ़ोन द्वारा भेजे जाने वाले Probe Request पैकेटों को स्निफ़ करने के उद्देश्य से लिखा गया है जो Wi-Fi कनेक्शन की तलाश में होते हैं। जब किसी स्मार्टफ़ोन पर Wi-Fi कनेक्शन सक्रिय होता है, तो वह ब्रॉडकास्ट में (सभी चैनल आवृत्तियों पर) एक probe request संदेश भेजता है जिसमें पूछा जाता है कि क्या कोई मुफ़्त Wi-Fi उपलब्ध है या कोई ज्ञात Wi-Fi है (अर्थात वह Wi-Fi जिसका पासवर्ड स्मार्टफ़ोन को पता है)। ESP32 इसे स्निफ़ करेगा और विभिन्न प्रकार की जानकारी निकालेगा।
प्रत्येक स्निफ़ किए गए पैकेट से निम्नलिखित जानकारी ली जाती है:
प्रत्येक मिनट के बाद यह जानकारी एक सर्वर को भेजी जाती है और प्रोसेस की जाती है। अंत में, प्रोसेस की गई जानकारी (स्मार्टफ़ोन की रीयल टाइम लोकेशन, स्मार्टफ़ोन फ़्रीक्वेंसी, आदि) को एक GUI के माध्यम से देखा जा सकता है।
फ़र्मवेयर में दो मुख्य थ्रेड/टास्क होते हैं:
Sniffer Task
Wi-Fi Task
lock का उपयोग किया जाता है।ESP32 को WIFI_MODE_APSTA मोड में कॉन्फ़िगर किया गया है: अर्थात यह "soft-AP and station control block" बनाता है और "soft-AP and station" प्रारंभ करता है। इसके कारण, ESP32 एक ही समय में जानकारी स्निफ़ करने और सर्वर पर भेजने में सक्षम होता है, जिससे डेटा भेजते समय पैकेट की जानकारी खोने से बचा जाता है।
यहाँ उन सभी जानकारी फ़ील्ड्स की पूरी सूची दी गई है जो एक Probe Request में हो सकती हैं (स्रोत IEEE 802.11-2012):

और नीचे Wireshark के साथ स्निफ़ किया गया एक पैकेट दिया गया है जिसमें आप प्रत्येक फ़ील्ड के लिए बिट्स की संख्या और पैकेट के भीतर उनकी स्थिति देख सकते हैं:

यह अनुभाग पुराना हो सकता है, अधिक जानकारी और ESP-IDF के साथ शुरुआत करने की नवीनतम मार्गदर्शिका के लिए आधिकारिक साइट देखें।
टूलचेन सेटअप करें
ESP-IDF प्राप्त करें
टूलचेन (जिसमें एप्लिकेशन को कंपाइल और बिल्ड करने के प्रोग्राम होते हैं) के अलावा, आपको ESP32 विशिष्ट API / लाइब्रेरीज़ की भी आवश्यकता होगी।
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
संस्करण v3.x पर चेकआउट करें
cd esp-idf
git checkout release/v3.2
ESP-IDF के लिए पथ सेटअप करें
टूलचेन प्रोग्राम IDF_PATH एनवायरनमेंट वेरिएबल का उपयोग करके ESP-IDF तक पहुँचते हैं।
यह वेरिएबल आपके PC पर सेट होना चाहिए, अन्यथा प्रोजेक्ट बिल्ड नहीं होंगे।
आवश्यक Python पैकेज इंस्टॉल करें
python -m pip install --user -r $IDF_PATH/requirements.txt
सुनिश्चित करें कि आपने पथ एक्सपोर्ट किया है
export IDF_PATH=~/esp/esp-idf
export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin
रेपो क्लोन करें
git clone https://github.com/ETS-PoliTO/esp32-sniffer.git
cd esp32-sniffer
ESP32 और आपके PC के बीच सीरियल कनेक्शन स्थापित करें
make menuconfig
Serial flasher config पर जाएँ, फिर Default serial port पर और वह पोर्ट सेट करें जिसमें ESP32 जुड़ा है
ध्यान दें कि, यदि आप ब्रिज का उपयोग कर रहे हैं, तो संभवतः आपको कुछ ड्राइवर डाउनलोड करने होंगे:
यह ESP32 और PC के बीच सीरियल कनेक्शन स्थापित करने के तरीके पर एक मार्गदर्शिका प्रदान करता है।
कोड बिल्ड करें और ESP32 को फ्लैश करें
make all && make flash
लॉग देखें
make monitor
फ़ाइल /main/Kconfig.projbuild में दो अलग-अलग मेनू हैं:
SPIFFS (SPI Flash File System)
इसमें SPIFFS पार्टीशन के बारे में कुछ महत्वपूर्ण जानकारी है:
SPIFFS एक फ़ाइल सिस्टम है जो वियर लेवलिंग, फ़ाइल सिस्टम कंसिस्टेंसी चेक और अन्य सुविधाओं का समर्थन करता है।
कॉन्फ़िगरेशन
इसमें विभिन्न वेरिएबल हैं:
ESP32_ID: ESP32 की IDWIFI_SSID: WiFi का SSID (नेटवर्क नाम)WIFI_PASS: WiFi पासवर्ड (WPA या WPA2)BROKER_ADDR: MQTT ब्रोकर का IPBROKER_PSW: MQTT ब्रोकर का पासवर्डBROKER_PORT: MQTT ब्रोकर का पोर्टCHANNEL: वह चैनल जिसमें ESP32 PROBE REQUEST स्निफ़ करेगाSNIFFING_TIME: स्निफ़िंग का समयउपरोक्त वेरिएबल कॉन्फ़िगर करने के लिए:
प्रोजेक्ट फ़ोल्डर के भीतर अपना टर्मिनल खोलें और चलाएँ
make menuconfig
वह मेनू चुनें जिसे आप संशोधित करना चाहते हैं
वेरिएबल को अपनी इच्छानुसार संपादित करें
आप विभिन्न वेरिएबल के साथ अलग-अलग मेनू भी जोड़ सकते हैं:
Kconfig.projbuild खोलें
एक नया मेनू शुरू करें
menu YOUR_MENU_NAME
अपनी आवश्यक वेरिएबल जोड़ें
मेनू समाप्त करें
endmenu