ESP32 da Wi-Fi bilan oʻyin

ESP32 da Wi-Fi bilan oʻyin

Menga WiFi tarmoqlarini tahlil qilish uchun cho'ntak vositasini yaratish g'oyasini bergan narsa ushbu maqola.

Fikr uchun ularga rahmat. Shunchaki qiladigan ishim yo'q edi.

Barcha ishlar o'yin-kulgi va tarmoq texnologiyalari sohasidagi bilimimni kengaytirish maqsadida sevimli mashg'ulotning bir qismi sifatida amalga oshirildi. Sekin-asta, bu yil boshidan haftasiga 1..4 soat.
Men hech qanday amaliy foydalanishni rejalashtirmaganman. Bular. Bu xakerlar vositasi EMAS.

Ayni paytda barcha rejalashtirilgan funksiyalar ishlamoqda. Barcha manbalar yig'ishga to'liq tayyor, bu yerda e'lon qilingan. Shuningdek, yig'ish bo'yicha ko'rsatmalar va boshqalar mavjud. Ushbu eslatmada men github-da joylashtirilgan ma'lumotlarni takrorlamayman. Men faqat alohida ta'riflash uchun zarur deb hisoblagan narsalarni aytib beraman.

"Universal vosita" va ESP32 ni tanlash sababi haqidagi fikrim

Men o'zimni haqiqat deb da'vo qilmayman. Har kimning o'ziga xosligi bor. Men uskunani tanlashimni oqlashga harakat qilaman.

Maqolada taklif qilingan Linux (dastlab Raspberry Pi) + boshqaruvchi (STM32) + CC1110 (8051 yadro) ko'rinishidagi "periferik qurilmalar" kombinatsiyasidan foydalanish holati va u erda mumkin bo'lgan hamma narsani siqish rejasi (125 kHz, NFC, 433 mGts, USB, iButton, bluetooth, ?) menga mos kelmadi. Biroq, bu loyiha Ko'rinishidan, u shaxsiy va yopiq bo'lib qoladi (flipper-nol github "Ushbu tashkilotda ommaviy omborlar yo'q.") va unchalik keng tarqalgan bo'lmagan uskunaga o'tdi.

Ehtimol, men noto'g'riman va kelajakda mualliflar dasturiy ta'minot manbalarini ommaga ochiq qiladilar. Ammo agar bo'lmasa, men manba kodisiz bunday uskunani sotib olmagan bo'lardim.

"Asbob"ga qo'yiladigan talablarim

Quti kichik bo'lishi kerak (qanchalik kichik bo'lsa, shuncha yaxshi).

Shuning uchun:

  • O'rnatilgan batareya kerak emas. Wi-Fi bilan ishlashda oqim > 100 mA bo'lsa, o'rnatilgan batareya katta bo'ladi yoki uzoq davom etmaydi. Shuning uchun, "quti" standart quvvat banki tomonidan quvvatlansin. Qanday bo'lmasin, mening cho'ntagimda/mashinamda har doim quvvat banki bor.
  • Linux "qutisini" ichida asboblar bilan saqlang, uzoq yillar davomida barcha tillarda yozilgan Kichkina ekran va kam sonli boshqaruv tugmalari bilan bu hech qanday ma'noga ega emas. Natijalarni to'liq klaviatura va ekranga ega oddiy noutbukda ko'rish/qayta ishlash mumkin.
  • Komponentlarga osongina kirish mumkin va keng ma'lum bo'lishi kerak (mavjud SDK, ko'plab misollar va hujjatlar).

Natijada, men uchun tanlov aniq edi - ESP32.

Maqolada aytilgan, meni harakatga undagan barcha vazifalar uchun ESP32 ning imkoniyatlari juda etarli. Garchi men hali ham qilmoqchi bo'lgan eng ko'p narsa:

  • Bluetooth bilan o'ynang.
  • Eng oddiy uskuna yordamida 433 mGts diapazonda o'ynang (faqat amplituda modulyatsiyasi, bu amaliy ehtiyojlar uchun etarli).

ESP32 da malhamda uching

  • ESP32 SDK (IDF) biroz noqulay.
  • Ba'zi funksiyalar (masalan, Wi-Fi to'plami) yig'ilgan statik kutubxonalar ko'rinishidagi manba kodisiz keladi.
  • 5 gigagertsli diapazon qo'llab-quvvatlanmaydi va WiFi bilan ishlashda ba'zi cheklovlar va noqulayliklar mavjud.

Ammo narx / o'lcham bu kamchiliklarni to'liq qoplaydi.

Dasturiy ta'minotning asosiy funksionalligi

Funktsionallik va o'z fikrimni qisqacha tasvirlab beraman...

Sozlamalarni boshqarish va SD dan fayllarni yuklash

Barcha tashqi boshqaruv alohida menyu bandida ishga tushirilgan oddiy Web-sahifa orqali amalga oshiriladi. ESP32 WiFi AP rejimida ishga tushadi va belgilangan IP manzilidagi sahifani ko'rsatadi.

ESP32 yadrolari juda tez bo'lsa-da, tajribalar shuni ko'rsatdiki, o'rnatilgan veb-xizmat va, masalan, yo'riqnoma rejimining bir vaqtning o'zida ishlashi juda mos kelmaydi. Shuning uchun dinamik boshqaruv mavjud emas va sahifa boshqa barcha rejimlarda mavjud emas.
Bundan tashqari, tadqiqot maqsadlari uchun dinamik nazorat kerak emas.

Beacon paketlari bilan ishlash tartibi

Rejimlar banal va unchalik qiziq emas. "Bu mumkin bo'lgani uchun" qilingan. Tekshirish uchun.
Rasmiy Espressif misollarida misollar mavjud.

AP ro'yxatini skanerlash rejimi.
Aslida, har qanday smartfon buni qila oladi.
Xo'sh, bu rejimda AP ro'yxati saqlanadi.
Mayoq spameri.
ESP32 yashirin SSID va tasodifiy MACga ega AP sifatida boshlanadi va oldindan yaratilgan SSIDlar roʻyxatiga (qoʻlda yaratilgan yoki avvalroq AP roʻyxatini skanerlash orqali olingan) muvofiq [mayoq ramkasi] yuborishni boshlaydi.

Wi-Fi paketini hidlash rejimi

Espressif ishlab chiquvchilari amaliy dasturlarga qayta qo'ng'iroq qilish funksiyasi orqali "havoda uchayotgan" barcha WiFi paketlarini qabul qilish qobiliyatini qo'shdilar. Aslida hammasi emas, chunki rejimni faqat bitta sobit kanal uchun o'rnatishingiz mumkin.

Qayta qo'ng'iroq qilish funktsiyasini qayta ishlash uchun juda qattiq vaqt cheklovlari qo'yiladi. Agar bu oddiy statistik ma'lumotlarni yig'ish rejimida muammo tug'dirmasa, SD-kartadagi PCAP fayllarini yozish rejimi uchun men xotira va semaforlardagi navbat orqali yozishni tashkil qilishim kerak edi. Qayta qo'ng'iroqni chaqirish jarayoni bir yadroda, SD-ga yozish jarayoni esa boshqasida ishlashining o'ziga xosligini hisobga olgan holda.

"Shovqinli havo" paytida ba'zi paketlar yo'qoladi (navbatda joy yo'q va ular tashlab yuboriladi), lekin kechqurun kvartiraning odatiy "havosi" bilan (ko'rish oralig'ida 5..7 AP), PCAPda qayd etiladi. paketlarni yo'qotmasdan yakunlanadi.

Bundan tashqari, PCAP monitoringi va yozib olish uchun paket sarlavhalaridagi MAC ro'yxatiga asoslangan filtrlash rejimi mavjud.

Misol uchun, siz klub/kafedagi odamning ko'rinishini u kirmasdan yoki ko'zga ko'rinmasdan kuzatishingiz mumkin. Kamdan-kam odamlar Wi-Fi va ma'lum AP-larga avtomatik ulanishni o'chirib qo'yadi. (Men uni hozir o'chiraman ..)

Wireshark-da qayd etilgan trafikni ko'rish ma'rifiy va xaritalarni tushunish uchun qiziqarli - barchasi ishlaydi.

Deaut paketlari bilan ishlash rejimi

Odatiy bo'lib, manbalarsiz keladigan libnet80211.a kutubxonasida bu paketlarni yuborish taqiqlangan. Ammo bir nechta bitlarni o'zgartirish orqali tuzatish oson. Avvaliga yamoqni joylashtirishga arziydimi, deb shubha qildim. Ammo autentifikatsiya freymlarini skanerlash rejimi yoqilgan turli joylarda aylanib chiqqanimdan so'ng, men o'yladim: "qanday do'zax". Bundan tashqari, esp8266-da ushbu paketlarni etkazib berish yopiq emas va github-da esp8266 uchun yig'ilishlar mavjud.

Ko'p joylarda (qaerda aytmayman) bu usul orqali kiruvchi APlarni bostirish qo'llaniladi. Va bular "bezorilar" emas ...

Telefonimdagi internet tarqatishim ba'zi joylarda ishlamayotganiga ham hayron bo'ldim...

Bunday paketlarning soni va RSSI-ni kuzatish rejimi "chap AP-larga qaerda yoqmasligini" tushunish uchun juda foydali.

router rejimi

Bu xususiyat, ehtimol, o'rganish uchun eng qiziqarli.

ESP32 STA + SoftAP rejimida bir vaqtning o'zida ishlashni qo'llab-quvvatlaydi. Shuning uchun siz klassik NAT routerini o'rnatishingiz mumkin.

Tarmoq stekini qo'llab-quvvatlash uchun Espressif lwip kutubxonasining vilkalaridan (deyarli o'zgarmagan) foydalanadi.

Ammo, sukut bo'yicha, standart tuzilmada esp-lwip kutubxonasi "ap" (SoftAP) va "st" (STA) netif interfeyslari o'rtasida uzatishni ta'minlamaydi.

Albatta, siz buni NATsiz qilishingiz mumkin, lekin bir vaqtning o'zida ikki yoki undan ortiq STA-ni "ap" interfeysiga ulash va IP-manzillarni "st" dan "ap" tarmoq interfeysiga sinxronlashtirish bilan bog'liq muammo mavjud. Shunday qilib, qiyinchiliklar bunga loyiq emas va NAT orqali osonroq.

Bundan tashqari, IP4 uchun NAT ning oddiy amalga oshirilishini qo'shadigan martin-ger-dan esp-lwip fork mavjud.

Mening qo'llarim uni faqat kosmetik jihatdan qayta tiklash uchun qichiyotgan bo'lsa-da (menimcha, bu loyihaning vilkalarisiz osonroq edi, lekin LWIP orqaliQILIN yig'ish paytida aniqlangan funktsiyalar), lekin dangasalik ustunlik qildi va martin-ger varianti avvalgidek qo'llaniladi.

Router rejimida IP4 kiruvchi va chiquvchi trafik ko'riladi.

Xususan, ekranda ko'rsatish va statistik ma'lumotlarni faylga yig'ish uchun undan quyidagilar olinadi:

  • SoftAP ESP32 (DHCP paketlari) ga ulangan qurilma nomi
  • SoftAP ESP53 ga ulangan qurilmadan DNS so'rovlaridan (UDP port 32) URL.

Bundan tashqari, siz PCAP fayliga trafikni yozishni yoqishingiz mumkin.

Bu rejim, masalan, telefoningiz tarmoqqa nima yuborayotganini va u qaerga ketishini tushunish uchun juda foydali.

SoftAP ESP32 kiruvchi va chiquvchi trafikni tarmoq interfeysi darajasida to‘liq nazorat qilish imkoniyatini hisobga olgan holda ushbu rejimdan foydalanishning boshqa usullarini o‘ylab ko‘rishingiz mumkin: Ehernet sarlavhasi (destMAC[6]+srcMAC[6]+turi[2]) + foydali yuk (IP4, IP6, DCHP va boshqalar turi).

Asosan, ESP32 WiFi->WiFi router funktsiyasi bilan juda yaxshi ishlaydi, oddiy trafikdan hech qanday maxsus kechikishlarsiz o'tadi. Subyektiv ravishda, ESP32 da router orqali ulangan telefonda kechikishlar sezilmaydi.

Afsuski, Espressif API-da SoftAP EPS32-ga ulangan MAC uchun filtr o'rnatish imkoniyati yo'q. Buning o'rniga, allaqachon ulangan, "xostalanmagan" STA'lar bilan "xayr" (esp_wifi_deauth_sta) deyish taklif etiladi.

Ulangan STAlar uchun MAC orqali filtrlash esp_wifi_deauth_sta() chaqiruvi orqali amalga oshirilishi kerak edi.

Xulosa

ESP32 bilan ishlash doirasida men yangi hech narsa o'ylab topmagan bo'lsam ham, ehtimol natija (manba kodi) kimdir uchun qiziqarli bo'ladi.

Shuni ta'kidlashni istardimki, kod faqat ta'lim maqsadida yozilgan. "Buzg'unchilik" va boshqalar uchun u ataylab unchalik qulay bo'lmagan.

Men bosilgan elektron platani qilmadim, chunki tayyor sharflarni sim bilan lehimlash uchun 1.5-2 soat kerak bo'ldi.

Va agar shunday qilsangiz, uni tayyor taxtalardan emas, balki alohida komponentlardan yig'ishingiz kerak. Keyin o'lchamlar yanada kichikroq bo'ladi.

Manba: www.habr.com

a Izoh qo'shish