Mängimine WiFi-ga ESP32-l

Mängimine WiFi-ga ESP32-l

Mis andis mulle idee teha taskutööriist WiFi võrkude analüüsimiseks see artikkel.

Aitäh neile idee eest. Mul polnud lihtsalt midagi teha.

Kõik tööd tehti hobi korras, et lõbutseda ja oma teadmisi võrgutehnoloogiate vallas täiendada. Aeglaselt, 1..4 tundi nädalas, selle aasta algusest.
Praktilist kasutamist ma ei plaaninud. Need. See EI OLE häkkeri tööriist.

Hetkel kõik planeeritud funktsionaalsused töötavad. Kõik allikad, täielikult kokkupanemiseks valmis, postitatud siia. Seal on ka monteerimisjuhised jne. Selles märkuses ma ei dubleeri githubi postitatud teavet. Ma ütlen teile ainult seda, mida pean vajalikuks eraldi kirjeldada.

Minu arvamus universaalsest tööriistast ja ESP32 valimise põhjusest

Ma ei väida, et olen tõde. Igaühel on oma. Püüan oma riistvara valikut põhjendada.

Artiklis välja pakutud Linuxi (algselt Raspberry Pi) + "välisseadmete" kombinatsiooni kasutusjuht kontrolleri (STM32) + CC1110 (8051 tuum) kujul ja plaan toppida sinna kõik võimalik (125 kHz, NFC, 433 mHz, USB, iButton, bluetooth, ?) ei tundunud mulle sobivat. Kuid, see projekt Paistab, et see jääb privaatseks ja suletuks (null-null github "Sellel organisatsioonil pole avalikke hoidlaid.") ja läks kasutama vähe levinud riistvara.

Võib-olla ma eksin ja tulevikus teevad autorid tarkvaraallikad avalikult kättesaadavaks. Aga kui ei, siis ma ei ostaks sellist riistvara ilma lähtekoodita.

Minu nõuded "tööriistale"

Kast peaks olema väike (mida väiksem, seda parem).

Seetõttu:

  • Sisseehitatud akut pole vaja. Voolutugevusega > 100 mA Wifiga töötamisel on sisseehitatud aku kas suur või ei kesta kaua. Seetõttu laske "kastil" toiteallikaks olla tavaline elektripank. Igatahes on mul alati taskus/autos power bank.
  • Hoidke Linuxi "karpi" tööriistadega, kirjutatud paljude aastate jooksul kõigis keeltes Väikese ekraani ja kasina juhtnuppude komplektiga pole sellel mõtet. Tulemusi saab vaadata/töödelda tavalisel täisklaviatuuri ja ekraaniga sülearvutil.
  • Komponendid peaksid olema kergesti ligipääsetavad ja laialt tuntud (saadaval SDK, palju näiteid ja dokumentatsiooni).

Selle tulemusena oli minu jaoks valik ilmne - ESP32.

Kõigi artiklis nimetatud ülesannete jaoks, mis ajendasid mind tegutsema, on ESP32 võimalused täiesti piisavad. Kuigi kõige rohkem, mida ma veel teha tahan, on:

  • Mängige ringi Bluetoothiga.
  • Mängige 433mHz vahemikuga kõige lihtsama riistvaraga (ainult amplituudmodulatsioon, millest piisab praktilisteks vajadusteks).

ESP32-s hoopi

  • ESP32 SDK (IDF) on mõnevõrra kohmakas.
  • Mõned funktsioonid (näiteks WiFi-pinn) tulevad ilma lähtekoodita kokkupandud staatiliste teekide kujul.
  • 5 gHz sagedusala ei toetata ning WiFi-ga töötamisel on mõned piirangud ja kohmakus.

Aga hind/suurus kompenseerib need puudused täielikult.

Peamised tarkvarafunktsioonid

Kirjeldan lühidalt funktsionaalsust ja oma arvamust...

Seadete haldamine ja failide üleslaadimine SD-lt

Kogu väline juhtimine toimub lihtsa veebilehe kaudu, mis käivitatakse eraldi menüükäsuga. ESP32 käivitub WiFi AP režiimis ja kuvab lehe fikseeritud IP-aadressil.

Kuigi ESP32 tuumad on üsna kiired, nagu katsed on näidanud, ei ühildu sisseehitatud veebiteenuse ja näiteks ruuteri režiimi samaaegne töö kuigi hästi. Seetõttu puudub dünaamiline juhtimine ja leht pole kõigis muudes režiimides saadaval.
Lisaks pole dünaamilist juhtimist teadusuuringute jaoks vaja.

Beaconi pakettidega töötamise režiim

Režiimid on banaalsed ja mitte eriti huvitavad. Tehtud "sest see on võimalik". Kontrollimiseks.
Ametlikes Espressifi näidetes on näiteid.

AP loendi skannimise režiim.
Tegelikult saab seda teha iga nutitelefon.
Noh, selles režiimis AP loend salvestatakse.
Majaka rämpspostitaja.
ESP32 alustab varjatud SSID-ga ja juhusliku MAC-iga AP-na ning hakkab saatma [majakakaadrit] vastavalt eelnevalt koostatud SSID-de loendile (loodud käsitsi või saadud varem AP loendi skaneerimisega)

WiFi-pakettide nuusutamise režiim

Espressifi arendajad on lisanud rakendustarkvarale võimaluse võtta vastu kõik õhus lendlevad WiFi-paketid tagasihelistamise funktsiooni kaudu. Tegelikult mitte kõik, kuna saate režiimi seada ainult ühe fikseeritud kanali jaoks.

Tagasihelistamise funktsiooni töötlemisel on kehtestatud väga ranged ajapiirangud. Kui lihtsa statistika kogumise režiimi puhul see probleeme ei tekita, siis SD-kaardile PCAP-failide salvestamise režiimi puhul pidin ma nokitsema, korraldades salvestuse mällu ja semaforides oleva järjekorra kaudu. Võttes arvesse eripära, et tagasihelistamise protsess töötab ühes tuumas ja protsess, mis kirjutab SD-le teises.

“Müraka õhu” ajal lähevad osad paketid kaotsi (järjekorras pole ruumi ja need visatakse ära), kuid tüüpilise õhtuse korteri “õhuga” (nähtavuse piires 5..7 AP), salvestamine PCAP-is. lõpetatakse ilma pakettide kadumiseta.

Lisaks on PCAP-i jälgimiseks ja salvestamiseks filtreerimisrežiim, mis põhineb MAC-loendil paketi päistes.

Näiteks saate jälgida inimese välimust klubis/kohvikus juba enne, kui ta siseneb või tema nägemisulatusse ilmub. Vähesed inimesed keelavad WiFi ja automaatsed ühendused teadaolevate AP-dega. (Praegu lülitan selle välja..)

Salvestatud liikluse vaatamine Wiresharkis on hariv ja huvitav kaartide mõistmiseks – see kõik töötab.

Death-pakettidega töötamise režiim

Vaikimisi on nende pakettide saatmine ilma allikateta teegis libnet80211.a keelatud. Kuid seda on lihtne paari bitti kohandades parandada. Alguses kahtlesin, kas tasub plaastrit postitada. Kuid pärast seda, kui kõndisin erinevates kohtades ringi, kui autentimiskaadri skannimise režiim oli sisse lülitatud, mõtlesin: "mis kuradit." Veelgi enam, esp8266-s pole nende pakettide tarnimine suletud ja esp8266 jaoks on githubis koostud.

Paljudes kohtades (ma ei ütle, kus) kasutatakse selle meetodi abil soovimatute AP-de mahasurumist. Ja need pole "kiusajad"...

Ja ma olin ka üllatunud, et mu Interneti-levi telefonist mõnes kohas ei töötanud...

Selliste pakettide arvu ja RSSI jälgimise režiim on väga kasulik, et mõista, "kus see vasakpoolsetele AP-dele ei meeldi".

ruuteri režiim

See funktsioon on ilmselt kõige huvitavam, mida uurida.

ESP32 toetab samaaegset tööd STA + SoftAP režiimis. Seetõttu saate sellel rakendada klassikalise NAT-ruuteri.

Võrguvirna toetamiseks kasutab Espressif lwip teegi kahvlit (peaaegu muutumatuna).

Kuid vaikimisi ei paku esp-lwip teek standardversioonis edastamist netif-liideste "ap" (SoftAP) ja "st" (STA) vahel.

Muidugi saate seda teha ka ilma NAT-ita, kuid probleem on kahe või enama STA samaaegse ühendamisega liidesega "ap" ja IP-aadresside sünkroonimisega "st" võrguliidesest "ap"-ga. Nii et raskused pole seda väärt ja NAT-i kaudu on see lihtsam.

Lisaks on martin-gerist olemas kahvel esp-lwip, mis lisab IP4 jaoks NAT-i lihtsa juurutamise.

Kuigi mu käed sügelesid seda puhtalt kosmeetiliselt ümber teha (minu arvates oli see lihtsam ilma projektita, kuid LWIP-i kauduHOOK komplekteerimisel määratletud funktsioonid), kuid laiskus võitis ja martin-geri valikut kasutatakse nii nagu on.

Ruuteri režiimis vaadatakse sissetulevat ja väljaminevat IP4 liiklust.

Eelkõige ekstraheeritakse sellest ekraanil kuvamiseks ja statistika kogumiseks faili:

  • SoftAP ESP32-ga (DHCP-paketid) ühendatud seadme nimi
  • URL DNS-i päringutest (UDP port 53) SoftAP ESP32-ga ühendatud seadmest.

Lisaks saate lubada liikluse salvestamise PCAP-faili.

See režiim on väga kasulik näiteks selleks, et mõista, mida telefon võrku saadab ja kuhu see läheb.

Selle režiimi kasutamiseks võite mõelda ka muudele viisidele, võttes arvesse võimalust täielikult juhtida softAP ESP32 sissetulevat ja väljaminevat liiklust võrguliidese tasemel: Eherneti päis (destMAC[6]+srcMAC[6]+tüüp[2]) + kasulik koormus (IP4, IP6, DCHP jne tüüp).

Põhimõtteliselt tuleb ESP32 päris hästi toime WiFi->WiFi ruuteri funktsiooniga, läbides tavaliikluse ilma eriliste viivitusteta. Subjektiivselt ei ole ESP32 ruuteri kaudu ühendatud telefoni viivitused märgatavad.

Kahjuks pole Espressifi API-l võimalust seadistada SoftAP EPS32-ga ühendatud MAC-i filtrit. Selle asemel tehakse ettepanek öelda "hüvasti" (esp_wifi_deauth_sta) juba ühendatud STA-dele, mida "ei soovita".

Ühendatud STA-de MAC-i järgi filtreerimine tuli teha esp_wifi_deauth_sta() kõne kaudu

Kokkuvõttes

Kuigi ma ei tulnud ESP32-ga töötamise raames midagi uut välja, võib-olla on tulemus (lähtekood) kellelegi huvitav.

Tahaksin märkida, et kood on kirjutatud ainult hariduslikel eesmärkidel. "Häkkimiseks" jne tehti see teadlikult mitte eriti mugavaks.

Trükkplaati ma ei teinud, sest valmis sallide traadiga jootmine võttis aega 1.5-2 tundi.

Ja kui teete, peate selle kokku panema mitte valmisplaatidest, vaid üksikutest komponentidest. Siis on mõõtmed veelgi väiksemad.

Allikas: www.habr.com

Lisa kommentaar