Žaidimai naudojant „Wi-Fi“ naudojant ESP32

Žaidimai naudojant „Wi-Fi“ naudojant ESP32

Man kilo mintis sukurti kišeninį įrankį WiFi tinklų analizei šis straipsnis.

Ačiū jiems už idėją. Tiesiog neturėjau ką veikti.

Visas darbas buvo atliktas kaip hobis, siekiant smagiai praleisti laiką ir plėsti žinias tinklo technologijų srityje. Lėtai, 1..4 valandos per savaitę, nuo šių metų pradžios.
Praktinio panaudojimo neplanavau. Tie. Tai NĖRA įsilaužėlių įrankis.

Šiuo metu veikia visos suplanuotos funkcijos. Visi šaltiniai, visiškai paruošti surinkimui, paskelbta čia. Taip pat yra surinkimo instrukcijos ir tt Šioje pastaboje aš nedubliuosiu informacijos, paskelbtos github. Pasakysiu tik tai, ką manau būtina aprašyti atskirai.

Mano nuomonė apie „universalų įrankį“ ir ESP32 pasirinkimo priežastį

Aš nepretenduoju į teisybę. Kiekvienas turi savo. Pabandysiu pagrįsti savo aparatūros pasirinkimą.

Siūloma straipsnyje Linux (iš pradžių Raspberry Pi) ir periferinių įrenginių derinio panaudojimas valdiklio (STM32) + CC1110 (8051 branduolys) pavidalu ir planas ten sutalpinti viską, kas įmanoma (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) man neatrodė tinkami. Tačiau Šis projektas Panašu, kad jis išliks privatus ir uždarytas (github „Flipper-zero github“ „Ši organizacija neturi viešųjų saugyklų.“) ir bus nukreipta į ne itin įprastą aparatinę įrangą.

Galbūt aš klystu, ir ateityje autoriai programinės įrangos šaltinius padarys viešai prieinamus. Bet jei ne, aš nepirkčiau tokios įrangos be šaltinio kodo.

Mano reikalavimai "įrankiui"

Dėžutė turi būti maža (kuo mažesnė, tuo geriau).

Todėl:

  • Nereikia integruotos baterijos. Esant > 100 mA srovei dirbant su Wifi, įmontuota baterija bus arba didelė, arba neilgai. Todėl tegul „dėžutė“ maitinama standartiniu maitinimo bloku. Šiaip visada kišenėje/automobilyje turiu power banką.
  • Laikykite „Linux“ „dėžutę“ su įrankiais viduje, parašyta per daugelį metų visomis kalbomis Turint nedidelį ekraną ir menką valdymo mygtukų rinkinį, tai neturi prasmės. Rezultatus galima peržiūrėti/apdoroti įprastame nešiojamajame kompiuteryje su visa klaviatūra ir ekranu.
  • Komponentai turi būti lengvai prieinami ir plačiai žinomi (galimas SDK, daug pavyzdžių ir dokumentacijos).

Dėl to man pasirinkimas buvo akivaizdus – ESP32.

Visoms straipsnyje nurodytoms užduotims, kurios paskatino mane imtis veiksmų, ESP32 galimybių visiškai pakanka. Nors labiausiai vis dar noriu padaryti:

  • Žaisk su Bluetooth.
  • Žaiskite su 433 mHz diapazonu su paprasčiausia technine įranga (tik amplitudės moduliacija, kurios pakanka praktiniams poreikiams).

„Fly in tepal“ ESP32

  • ESP32 SDK (IDF) yra šiek tiek gremėzdiškas.
  • Kai kurios funkcijos (pavyzdžiui, „WiFi“ krūva) pateikiamos be šaltinio kodo surinktų statinių bibliotekų pavidalu.
  • 5 gHz juosta nepalaikoma, o dirbant su „WiFi“ yra tam tikrų apribojimų ir nerangumo.

Bet kaina/dydis visiškai kompensuoja šiuos trūkumus.

Pagrindinės programinės įrangos funkcijos

Trumpai aprašysiu funkcionalumą ir savo nuomonę apie...

Nustatymų tvarkymas ir failų įkėlimas iš SD

Visas išorinis valdymas atliekamas per paprastą tinklalapį, paleidžiamą atskirame meniu punkte. ESP32 paleidžiamas WiFi AP režimu ir rodomas puslapis fiksuotu IP adresu.

Nors ESP32 branduoliai yra gana greiti, kaip parodė eksperimentai, tuo pačiu metu integruotos žiniatinklio paslaugos ir, pavyzdžiui, maršrutizatoriaus režimo veikimas nėra labai suderinami. Todėl nėra dinaminio valdymo ir puslapis nepasiekiamas visais kitais režimais.
Be to, tyrimų tikslais dinaminis valdymas nereikalingas.

Darbo su švyturių paketais būdas

Režimai banalūs ir nelabai įdomūs. Sukurta „dėl to, kad tai įmanoma“. Dėl patikrinimo.
Yra pavyzdžių oficialiuose Espressif pavyzdžiuose.

AP sąrašo nuskaitymo režimas.
Tiesą sakant, bet kuris išmanusis telefonas gali tai padaryti.
Na, šiuo režimu AP sąrašas bus išsaugotas.
Švyturys šiukšlių siuntėjas.
ESP32 prasideda kaip AP su paslėptu SSID ir atsitiktiniu MAC ir pradeda siųsti [švyturio kadrą] pagal iš anksto sukurtą SSID sąrašą (sukurtą rankiniu būdu arba gautą anksčiau nuskaitant AP sąrašą).

WiFi paketų uostymo režimas

„Espressif“ kūrėjai pridėjo taikomosios programinės įrangos galimybę priimti visus „oru skraidančius“ „WiFi“ paketus per atgalinio skambinimo funkciją. Tiesą sakant, ne visi, nes galite nustatyti tik vieno fiksuoto kanalo režimą.

Atšaukimo funkcijos apdorojimui taikomi labai griežti laiko apribojimai. Jei tai nesukelia problemų naudojant paprastą statistikos rinkimo režimą, tada, naudojant PCAP failų įrašymo režimą SD kortelėje, turėjau tvarkyti įrašą per eilę atmintyje ir semaforus. Atsižvelgiant į ypatumą, kad atgalinio skambinimo procesas vyksta viename šerdyje, o procesas, kuris rašo į SD – kitame.

„Triukšmingo oro“ metu kai kurie paketai prarandami (eilėje vietos nėra ir jie išmetami), bet su tipišku buto „oru“ vakare (matomumo ribose 5...7 AP), įrašymas į PCAP. baigiamas neprarandant paketų.

Be to, PCAP stebėjimui ir įrašymui yra filtravimo režimas, pagrįstas MAC sąrašu paketų antraštėse.

Pavyzdžiui, galite sekti žmogaus pasirodymą klube/kavinėje jam net neįeinant arba jam nepasirodant. Nedaug žmonių išjungia „WiFi“ ir automatinį ryšį su žinomomis AP. (Dabar išjungiu..)

Žiūrėti įrašytą srautą „Wireshark“ yra mokoma ir įdomu suprasti žemėlapius – visa tai veikia.

Darbo su mirties paketais režimas

Pagal numatytuosius nustatymus šių paketų siuntimas draudžiamas libnet80211.a bibliotekoje, kuri pateikiama be šaltinių. Bet tai nesunku ištaisyti pakeitus porą bitų. Iš pradžių suabejojau, ar verta skelbti pataisą. Tačiau vaikščiojęs po įvairias vietas su įjungtu autentifikavimo kadrų nuskaitymo režimu, pagalvojau: „kas po velnių“. Be to, esp8266 šių paketų pristatymas nėra uždarytas, o esp8266 github yra surinkimų.

Daug kur (nesakysiu kur) šiuo metodu naudojamas nepageidaujamų AP slopinimas. Ir tai ne „patyčios“...

Ir dar nustebau, kad kai kur neveikė mano interneto paskirstymas iš telefono...

Tokių paketų skaičiaus ir RSSI stebėjimo režimas yra labai naudingas norint suprasti, „kur nepatinka kairieji AP“.

maršrutizatoriaus režimas

Ši funkcija tikriausiai yra įdomiausia iš visų tyrinėti.

ESP32 palaiko vienu metu veikimą STA + SoftAP režimu. Todėl jame galite įdiegti klasikinį NAT maršrutizatorių.

Kad palaikytų tinklo krūvą, Espressif naudoja lwip bibliotekos šakutę (praktiškai nepakitusią).

Tačiau pagal numatytuosius nustatymus standartinėje versijoje esp-lwip biblioteka nenumato persiuntimo tarp netif sąsajų „ap“ (SoftAP) ir „st“ (STA).

Žinoma, galite tai padaryti ir be NAT, tačiau kyla problemų tuo pačiu metu prijungus du ar daugiau STA prie „ap“ sąsajos ir sinchronizuojant IP adresus iš „st“ tinklo sąsajos su „ap“. Taigi sunkumai nėra verti ir lengviau per NAT.

Be to, iš martin-ger yra šakutė esp-lwip, kuri prideda paprastą NAT IP4 diegimą.

Nors rankos niežėjo perdaryti grynai kosmetiškai (mano nuomone, be projekto šakutės buvo lengviau, bet per LWIPKABLYS surinkimo metu apibrėžtos funkcijos), tačiau vyravo tinginystė ir martin-ger variantas naudojamas toks, koks yra.

Maršrutizatoriaus režimu žiūrimas įeinantis ir išeinantis IP4 srautas.

Visų pirma, iš jo išgaunama ši informacija, skirta rodyti ekrane ir rinkti statistiką į failą:

  • Prietaiso, prijungto prie SoftAP ESP32 (DHCP paketai), pavadinimas
  • URL iš DNS užklausų (53 UDP prievadas) iš įrenginio, prijungto prie SoftAP ESP32.

Be to, galite įjungti srauto įrašymą į PCAP failą.

Šis režimas labai naudingas, pavyzdžiui, norint suprasti, pavyzdžiui, ką jūsų telefonas siunčia į tinklą ir kur jis eina.

Galite galvoti apie kitus šio režimo naudojimo būdus, atsižvelgdami į galimybę visiškai valdyti softAP ESP32 įeinantį ir išeinantį srautą tinklo sąsajos lygiu: Ehernet antraštė (destMAC[6]+srcMAC[6]+type[2]) + naudingoji apkrova (IP4, IP6, DCHP ir kt. tipas).

Iš principo ESP32 gana gerai susidoroja su WiFi->WiFi maršrutizatoriaus funkcija, praleidžia įprastą srautą be ypatingų vėlavimų. Subjektyviai kalbant, vėlavimai telefone, prijungtame per maršrutizatorių ESP32, nėra pastebimi.

Deja, Espressif API neturi galimybės nustatyti MAC filtro, prijungto prie SoftAP EPS32. Vietoj to siūloma pasakyti „sudie“ (esp_wifi_deauth_sta) jau prijungtiems „nepageidaujamiems“ STA.

Prijungtų STA filtravimas pagal MAC turėjo būti atliktas naudojant esp_wifi_deauth_sta() iškvietimą

užbaigiant

Nors dirbdamas su ESP32 nieko naujo nesugalvojau, galbūt rezultatas (šaltinio kodas) kam nors bus įdomus.

Norėčiau atkreipti dėmesį, kad kodas buvo parašytas tik švietimo tikslais. „Įsilaužimui“ ir pan., Tai buvo sąmoningai padaryta nelabai patogiai.

Spausdintinės plokštės nedariau, nes gatavų šalikų litavimas viela užtruko 1.5-2 valandas.

O jei taip, tai reikia surinkti ne iš jau paruoštų lentų, o iš atskirų komponentų. Tada matmenys bus dar mažesni.

Šaltinis: www.habr.com

Добавить комментарий