Hranie s Wifi na ESP32

Hranie s Wifi na ESP32

To, čo mi vnuklo myšlienku vytvoriť vreckový nástroj na analýzu WiFi sietí, bolo v tomto článku.

Ďakujem im za nápad. Jednoducho som nemal čo robiť.

Všetky práce boli robené v rámci hobby za účelom zábavy a rozšírenia vedomostí v oblasti sieťových technológií. Pomaly, 1..4 hodiny týždenne, od začiatku tohto roka.
Praktické využitie som neplánoval. Tie. Toto NIE JE nástroj hackerov.

V súčasnosti fungujú všetky plánované funkcie. Všetky zdroje, úplne pripravené na montáž, uverejnené tu. Sú tam aj montážne pokyny atď. V tejto poznámke nebudem duplikovať informácie zverejnené na githube. Poviem vám len to, čo považujem za potrebné opísať samostatne.

Môj názor na „univerzálny nástroj“ a dôvod výberu ESP32

Netvrdím, že som pravda. Každý má svoje. Pokúsim sa zdôvodniť výber hardvéru.

Navrhnuté v článku prípad použitia kombinácie Linux (pôvodne Raspberry Pi) + “periférie” v podobe radiča (STM32) + CC1110 (8051 jadro) a plán napchať tam všetko možné (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) sa mi nezdali vhodné. však tento projekt Vyzerá to tak, že zostane súkromný a uzavretý (github flipper-zero „Táto organizácia nemá žiadne verejné úložiská.“) a prešiel k nie veľmi bežnému hardvéru.

Možno sa mýlim a v budúcnosti autori sprístupnia zdroje softvéru verejnosti. Ale ak nie, tak by som si takýto kus hardvéru bez zdrojového kódu nekúpil.

Moje požiadavky na "nástroj"

Krabica by mala byť malá (čím menšia, tým lepšia).

Z tohto dôvodu:

  • Nie je potrebná žiadna vstavaná batéria. Pri prúde > 100 mA pri práci s Wifi bude vstavaná batéria buď veľká, alebo dlho nevydrží. Nechajte preto „box“ napájať štandardnou powerbankou. Každopádne powerbanku mám vždy vo vrecku/aute.
  • Udržujte linuxovú „škatuľu“ s nástrojmi vo vnútri, napísané počas mnohých rokov vo všetkých jazykoch S malou obrazovkou a skromnou sadou ovládacích tlačidiel to nedáva zmysel. Výsledky je možné zobraziť/spracovať na bežnom notebooku s plnohodnotnou klávesnicou a obrazovkou.
  • Komponenty by mali byť ľahko dostupné a všeobecne známe (dostupná súprava SDK, množstvo príkladov a dokumentácia).

V dôsledku toho bola pre mňa voľba jasná - ESP32.

Na všetky úlohy uvedené v článku, ktoré ma prinútili konať, sú možnosti ESP32 úplne dostatočné. Aj keď najviac chcem ešte urobiť:

  • Hrajte sa s Bluetooth.
  • Pohrajte sa s rozsahom 433 MHz s najjednoduchším hardvérom (iba amplitúdová modulácia, ktorá pre praktické potreby postačuje).

V ESP32 lietajte v masti

  • ESP32 SDK (IDF) je trochu nemotorné.
  • Niektoré funkcie (napríklad zásobník WiFi) prichádzajú bez zdrojového kódu vo forme zostavených statických knižníc.
  • Pásmo 5gHz nie je podporované a pri práci s WiFi existujú určité obmedzenia a nemotornosť.

Ale cena/veľkosť tieto nedostatky úplne kompenzuje.

Hlavná softvérová funkcia

Stručne popíšem funkčnosť a môj názor na...

Správa nastavení a nahrávanie súborov z SD

Všetko externé ovládanie sa vykonáva prostredníctvom jednoduchej webovej stránky, ktorá sa spúšťa v samostatnej položke ponuky. ESP32 sa spustí v režime WiFi AP a zobrazí stránku s pevnou IP adresou.

Aj keď sú jadrá ESP32 dosť rýchle, ako ukázali experimenty, súčasná prevádzka vstavanej webovej služby a napríklad režim routera nie sú príliš kompatibilné. Preto neexistuje dynamické ovládanie a stránka nie je dostupná vo všetkých ostatných režimoch.
Navyše dynamické riadenie nie je potrebné na výskumné účely.

Režim práce s balíčkami Beacon

Režimy sú banálne a nie veľmi zaujímavé. Vyrobené „pretože je to možné“. Pre kontrolu.
Príklady sú v oficiálnych príkladoch Espressif.

Režim skenovania zoznamu AP.
V skutočnosti to dokáže každý smartfón.
V tomto režime sa uloží zoznam AP.
Beacon spammer.
ESP32 sa spustí ako AP so skrytým SSID a náhodným MAC a začne odosielať [beacon frame] podľa vopred vytvoreného zoznamu SSID (vytvoreného manuálne alebo získaného skôr skenovaním zoznamu AP)

Režim snímania paketov WiFi

Vývojári Espressif pridali do aplikačného softvéru možnosť prijímať všetky WiFi pakety „lietajúce vzduchom“ prostredníctvom funkcie spätného volania. Vlastne nie všetky, keďže režim môžete nastaviť len pre jeden pevný kanál.

Na spracovanie funkcie spätného volania sú kladené veľmi prísne časové obmedzenia. Ak to nespôsobuje problémy v režime jednoduchého zberu štatistík, potom v režime nahrávania súborov PCAP na kartu SD som musel pohrať, organizovať nahrávanie prostredníctvom frontu v pamäti a semaforoch. Berúc do úvahy zvláštnosť, že proces, ktorý volá spätné volanie, beží na jednom jadre a proces, ktorý zapisuje na SD, na inom.

Počas „hlučného vzduchu“ sa niektoré pakety stratia (vo fronte nie je miesto a sú zahodené), ale pri typickom „vzduchu“ bytu vo večerných hodinách (5..7 AP v rámci viditeľnosti), nahrávanie v PCAP je dokončená bez straty paketov.

Okrem toho na monitorovanie a nahrávanie PCAP existuje režim filtrovania založený na zozname MAC v hlavičkách paketov.

Môžete napríklad sledovať vzhľad osoby v klube/kaviarni ešte predtým, ako vôbec vstúpi alebo sa objaví na dohľad. Málokto zakáže WiFi a automatické pripojenia k známym AP. (už to vypínam..)

Prezeranie zaznamenanej premávky vo Wiresharku je vzdelávacie a zaujímavé pre pochopenie máp – to všetko funguje.

Režim pre prácu s balíkmi smrti

Štandardne je odosielanie týchto balíkov zakázané v knižnici libnet80211.a, ktorá sa dodáva bez zdrojov. Ale je ľahké to opraviť úpravou niekoľkých bitov. Najprv som pochyboval, či sa oplatí posielať patch. Ale keď som sa prechádzal po rôznych miestach so zapnutým režimom skenovania snímok na deautentizáciu, pomyslel som si: „Čo do pekla?“ Navyše v esp8266 nie je dodávka týchto balíkov uzavretá a na githube sú zostavy pre esp8266.

Na mnohých miestach (nepoviem kde) sa používa potlačenie nechcených AP prostredníctvom tejto metódy. A toto nie sú "násilníci"...

A tiež ma prekvapilo, že mi na niektorých miestach nefungovala internetová distribúcia z telefónu...

Režim sledovania počtu a RSSI takýchto paketov je veľmi užitočný na pochopenie toho, „kde sa to ľavým AP nepáči“.

režim smerovača

Táto funkcia je pravdepodobne najzaujímavejšia zo všetkých na preskúmanie.

ESP32 podporuje simultánnu prevádzku v režime STA + SoftAP. Preto naň môžete implementovať klasický NAT router.

Na podporu sieťového zásobníka používa Espressif vidlicu (prakticky nezmenenú) knižnice lwip.

Ale štandardne v štandardnej zostave knižnica esp-lwip neposkytuje preposielanie medzi netif rozhraniami „ap“ (SoftAP) a „st“ (STA).

Samozrejme, môžete to urobiť aj bez NAT, ale je problém so súčasným pripojením dvoch alebo viacerých STA do rozhrania ‚ap‘ a synchronizáciou IP adries zo sieťového rozhrania ‚st‘ do ‚ap‘. Takže ťažkosti nestoja za to a je to jednoduchšie cez NAT.

Okrem toho existuje fork esp-lwip od martin-ger, ktorý pridáva jednoduchú implementáciu NAT pre IP4.

Síce ma svrbeli ruky prerobiť to čisto kozmeticky (podľa mňa to bolo jednoduchšie bez forku projektu, ale cez LWIPHOOK funkcie definované pri montáži), ale prevládla lenivosť a možnosť z martin-ger sa používa tak, ako je.

V režime smerovača sa zobrazuje prichádzajúca a odchádzajúca prevádzka IP4.

Na zobrazenie na obrazovke a zhromažďovanie štatistík do súboru sa z neho extrahuje najmä nasledovné:

  • Názov zariadenia, ktoré sa pripojilo k SoftAP ESP32 (DHCP pakety)
  • URL z požiadaviek DNS (UDP port 53) zo zariadenia pripojeného k SoftAP ESP32.

Okrem toho môžete povoliť zaznamenávanie premávky do súboru PCAP.

Tento režim je veľmi užitočný napríklad na pochopenie toho, čo váš telefón posiela do siete a kam smeruje.

Môžete si vymyslieť iné spôsoby použitia tohto režimu, berúc do úvahy schopnosť úplne kontrolovať prichádzajúcu a odchádzajúce prenosy softAP ESP32 na úrovni sieťového rozhrania: hlavička Ehernet (destMAC[6]+srcMAC[6]+type[2]) + užitočné zaťaženie (typ IP4, IP6, DCHP atď.).

V zásade si ESP32 celkom dobre poradí s funkciou WiFi->WiFi router, pričom bežnou premávkou prejde bez zvláštnych zdržaní. Subjektívne oneskorenia v telefóne pripojenom cez router na ESP32 nie sú badateľné.

Bohužiaľ, Espressif API nemá možnosť nastaviť filter pre MAC pripojený k SoftAP EPS32. Namiesto toho sa navrhuje povedať „zbohom“ (esp_wifi_deauth_sta) už pripojeným STA, ktoré nie sú „žiaduce“.

Filtrovanie podľa MAC pre pripojené STA sa muselo vykonať prostredníctvom volania esp_wifi_deauth_sta()

na záver

Aj keď som v rámci práce s ESP32 neprišiel na nič nové, možno bude výsledok (zdrojový kód) pre niekoho zaujímavý.

Chcel by som poznamenať, že kód bol napísaný výlučne na vzdelávacie účely. Pre „hackovanie“ atď. to bolo zámerne nevhodné.

Nevyrobil som dosku s plošnými spojmi, pretože spájkovanie hotových šatiek drôtom trvalo 1.5-2 hodiny.

A ak áno, musíte ho zostaviť nie z hotových dosiek, ale z jednotlivých komponentov. Potom budú rozmery ešte menšie.

Zdroj: hab.com

Pridať komentár