
برنامج ثابت ESP32 يتنصّت على حزم PROBE REQUEST التي ترسلها الهواتف الذكية بحثًا عن اتصال Wi-Fi لاستخراج أنواع مختلفة من المعلومات
يستخدم هذا المشروع Espressif IoT Development Framework (ESP-IDF) وقد تم اختباره على وحدة ESP-WROOM-32 وإصدار esp-idf v3.2.
يمكن العثور على نظرة عامة على المشروع الكامل (أي البرنامج الثابت ESP32 والخادم وواجهة المستخدم الرسومية) هنا.
تمت كتابة هذا البرنامج الثابت بهدف التقاط حزم Probe Request التي ترسلها الهواتف الذكية التي تبحث عن اتصال Wi-Fi. عندما يكون اتصال Wi-Fi نشطًا على هاتف ذكي، فإنه يرسل عبر البث (في جميع ترددات القنوات) رسالة probe request يسأل فيها عما إذا كانت هناك أي شبكات Wi-Fi مجانية أو بعض الشبكات المعروفة (أي أن الهاتف الذكي يعرف كلمة المرور لتلك الشبكة). سيقوم ESP32 بالتقاطها واستخراج أنواع مختلفة من المعلومات.
تُؤخذ المعلومات التالية من كل حزمة يتم التقاطها:
بعد كل دقيقة تُرسل هذه المعلومات إلى خادم وتتم معالجتها. أخيرًا، يمكن عرض المعلومات المعالجة (الموقع الفعلي للهاتف الذكي في الوقت الحقيقي، تردد الهاتف الذكي، إلخ) من خلال واجهة المستخدم الرسومية.
يتكون البرنامج الثابت من خيطين/مهمتين رئيسيتين:
مهمة الالتقاط (Sniffer Task)
مهمة Wi-Fi (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.
إعداد سلسلة الأدوات (Toolchain)
الحصول على ESP-IDF
إلى جانب سلسلة الأدوات (التي تحتوي على برامج لتجميع وبناء التطبيق)، تحتاج أيضًا إلى واجهات برمجة التطبيقات / المكتبات الخاصة بـ ESP32.
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
التبديل إلى الإصدار v3.x
cd esp-idf
git checkout release/v3.2
إعداد المسار إلى ESP-IDF
تصل برامج سلسلة الأدوات إلى ESP-IDF باستخدام متغير البيئة IDF_PATH.
يجب إعداد هذا المتغير على جهاز الكمبيوتر الخاص بك، وإلا فلن يتم بناء المشاريع.
تثبيت حزم 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 وجهاز الكمبيوتر الخاص بك
make menuconfig
انتقل إلى Serial flasher config، ثم Default serial port واضبط المنفذ الذي يتصل به ESP32
لاحظ أنه إذا كنت تستخدم جسرًا (bridge)، فمن المحتمل أنك تحتاج إلى تنزيل بعض برامج التشغيل:
هذا يوفر دليلًا حول كيفية إنشاء اتصال تسلسلي بين ESP32 وجهاز الكمبيوتر.
بناء الكود وبرمجة ESP32
make all && make flash
عرض السجلات
make monitor
يحتوي الملف /main/Kconfig.projbuild على قائمتين مختلفتين:
SPIFFS (نظام ملفات SPI Flash)
يحتوي على بعض المعلومات المهمة حول قسم SPIFFS:
SPIFFS هو نظام ملفات يدعم موازنة التآكل (wear leveling) وفحوصات اتساق نظام الملفات والمزيد.
الإعدادات
تحتوي على متغيرات مختلفة:
ESP32_ID: معرّف ESP32WIFI_SSID: SSID الخاص بشبكة WiFi (اسم الشبكة)WIFI_PASS: كلمة مرور WiFi (WPA أو WPA2)BROKER_ADDR: عنوان IP لوسيط MQTTBROKER_PSW: كلمة مرور وسيط MQTTBROKER_PORT: منفذ وسيط MQTTCHANNEL: القناة التي سيلتقط فيها ESP32 طلبات PROBE REQUESTSNIFFING_TIME: مدة الالتقاطمن أجل إعداد المتغيرات أعلاه:
افتح الطرفية داخل مجلد المشروع ونفّذ
make menuconfig
اختر القائمة التي تريد تعديلها
عدّل المتغيرات كما تشاء
يمكنك أيضًا إضافة قوائم مختلفة بمتغيرات مختلفة:
افتح Kconfig.projbuild
ابدأ قائمة جديدة
menu YOUR_MENU_NAME
أضف المتغيرات التي تحتاجها
أنهِ القائمة
endmenu
SPIFFS
تحتاج إلى إنشاء جدول أقسام.
ESP32 MQTT
تم استخدام مكتبة ESP32 MQTT.
MD5
دالة تجزئة تُستخدم على الحزم الملتقطة من أجل الحصول على معرّف فريد.