Խաղեր Wifi-ով ESP32-ում

Խաղեր Wifi-ով ESP32-ում

WiFi ցանցերի վերլուծության համար գրպանային գործիք ստեղծելու գաղափարը դրդել է այս հոդվածը.

Շնորհակալություն նրանց գաղափարի համար։ Ես ուղղակի ուրիշ անելիք չունեի։

Բոլոր աշխատանքները կատարվել են որպես հոբբի՝ զվարճանալու և ցանցային տեխնոլոգիաների ոլորտում իմ գիտելիքներն ընդլայնելու նպատակով։ Կամաց-կամաց շաբաթական 1..4 ժամ այս տարվա սկզբից։
Ես չէի նախատեսում գործնական օգտագործում: Նրանք. Սա հաքերային գործիք չէ:

Այս պահին աշխատում է բոլոր նախատեսված ֆունկցիոնալությունը։ Բոլոր աղբյուրները լիովին պատրաստ են հավաքման, տեղադրված է այստեղ. Կան նաև հավաքման հրահանգներ և այլն: Այս գրառման մեջ ես չեմ կրկնօրինակի github-ում տեղադրված տեղեկատվությունը: Ես միայն կասեմ այն, ինչ անհրաժեշտ եմ համարում առանձին նկարագրել։

Իմ կարծիքը «ունիվերսալ գործիքի» և ESP32-ի ընտրության պատճառի մասին

Ես չեմ պնդում, որ գիտեմ ճշմարտությունը։ Յուրաքանչյուր մարդ ունի իր սեփականը: Ես կփորձեմ հիմնավորել սարքավորումների իմ ընտրությունը։

Առաջարկվում է հոդվածում օգտագործման դեպքերի համադրություն Linux (սկզբնապես Raspberry Pi) + «ծայրամասային սարքերը»՝ կառավարիչի (STM32) տեսքով + CC1110 (8051 միջուկ) և դրա մեջ հնարավոր ամեն ինչ խցկելու ծրագիրը (125 կՀց, NFC, 433 ՄՀց, USB, iButton, Bluetooth, ?) ինձ համար հարմար չթվացին։ Սակայն, այս նախագիծը Կարծես թե այն կմնա մասնավոր և փակ (flipper-zero github «Այս կազմակերպությունը չունի հանրային պահեստներ») և գնաց ոչ շատ տարածված սարքաշարի ուղղությամբ:

Միգուցե ես սխալվում եմ, և ապագայում հեղինակները ծրագրային ապահովման սկզբնական կոդը հանրությանը հասանելի կդարձնեն: Բայց եթե ոչ, ապա ես չէի գնի այդպիսի սարքավորում առանց աղբյուրի կոդի:

Իմ պահանջները «գործիքի» համար

Տուփը պետք է փոքր լինի (որքան փոքր, այնքան լավ):

Ահա թե ինչու:

  • Ներկառուցված մարտկոց չի պահանջվում: 100 մԱ հոսանքի դեպքում Wifi-ով աշխատելիս ներկառուցված մարտկոցը կա՛մ մեծ կլինի, կա՛մ երկար չի աշխատի: Հետեւաբար, թող «տուփը» սնուցվի ստանդարտ էներգաբանկով: Համենայն դեպս, ես միշտ իմ գրպանում/մեքենայում դրված է Power Bank:
  • Պահեք «տուփի» ներսում Linux գործիքներով, գրված է երկար տարիների ընթացքում բոլոր լեզուներով հաշվի առնելով փոքր էկրանը և կառավարման կոճակների խղճուկ հավաքածուն, իմաստ չկա: Արդյունքները կարելի է դիտել/մշակել նորմալ նոութբուքի վրա՝ ամբողջական ստեղնաշարով և էկրանով:
  • Բաղադրիչները պետք է լինեն հեշտությամբ հասանելի և լայնորեն հայտնի (հասանելի SDK, բազմաթիվ օրինակներ և փաստաթղթեր):

Արդյունքում ինձ համար ընտրությունն ակնհայտ էր՝ ESP32։

Հոդվածում նշված բոլոր առաջադրանքների համար, որոնք ինձ դրդեցին քայլեր ձեռնարկել, ESP32-ի հնարավորությունները բավականին բավարար են: Թեև ամենաշատը ես ուզում եմ անել սա է.

  • Խաղացեք Bluetooth-ով:
  • Խաղացեք 433 մՀց տիրույթով ամենապարզ սարքաշարով (միայն ամպլիտուդային մոդուլյացիան, որը բավարար է գործնական կարիքների համար):

Ճանճը քսուքի մեջ ESP32-ի համար

  • SDK (IDF) ESP32-ը մի քիչ անշնորհք է:
  • Որոշ գործառույթներ (օրինակ, WiFi-ի կույտ) գալիս է առանց աղբյուրի կոդի՝ կազմված ստատիկ գրադարանների տեսքով:
  • 5 ԳՀց տիրույթը չի ապահովվում, և կան որոշակի սահմանափակումներ և անշնորհքություն WiFi-ի հետ աշխատելիս:

Բայց գինը/չափը լիովին փոխհատուցում է այս թերությունները։

Ծրագրաշարի հիմնական ֆունկցիոնալությունը

Ես համառոտ նկարագրելու եմ ֆունկցիոնալությունը և իմ կարծիքը...

Կառավարեք կարգավորումները և վերբեռնեք ֆայլերը SD-ից

Ամբողջ արտաքին հսկողությունը կատարվում է պարզ վեբ էջի միջոցով, որը գործարկվում է ընտրացանկի առանձին տարրից: ESP32-ը սկսվում է WiFi AP ռեժիմով և ապահովում է էջ ֆիքսված IP հասցեով:

Թեև ESP32 միջուկները բավականին արագ են, ինչպես ցույց են տվել փորձերը, ներկառուցված վեբ ծառայության միաժամանակյա գործարկումը և, օրինակ, երթուղիչի ռեժիմը լավ չեն ընթանում: Հետևաբար, չկա դինամիկ հսկողություն, և էջը հասանելի չէ մնացած բոլոր ռեժիմներում:
Ավելին, դինամիկ հսկողությունը հետազոտական ​​նպատակների համար անհրաժեշտ չէ:

Փարոս փաթեթների ռեժիմ

Ռեժիմները սովորական են և ոչ այնքան հետաքրքիր: Պատրաստված է «որովհետև կարող են»: Պարզապես ցուցադրելու համար:
Օրինակները հասանելի են պաշտոնական Espressif օրինակներում:

AP ցուցակի սկանավորման ռեժիմ:
Իրականում, ցանկացած սմարթֆոն կարող է դա անել:
Դե, այս ռեժիմում AP ցուցակը կփրկվի:
Փարոս սպամեր:
ESP32-ը սկսվում է որպես AP՝ թաքնված SSID-ով և պատահական MAC-ով և սկսում է ուղարկել [beacon frame] SSID-ների նախապես ստեղծված ցուցակին (ձեռքով ստեղծված կամ ավելի վաղ ստացված՝ AP ցուցակը սկանավորելու միջոցով):

WiFi փաթեթի հոտի ռեժիմ

Էսպրեսիֆի մշակողները կիրառական ծրագրային ապահովման համար ավելացրել են «օդում թռչող» բոլոր WiFi փաթեթները հետ կանչելու ֆունկցիայի միջոցով ստանալու հնարավորություն: Իրականում ոչ բոլորը, քանի որ ռեժիմը կարող եք սահմանել միայն մեկ ֆիքսված ալիքի համար:

Կան շատ խիստ ժամանակային սահմանափակումներ հետադարձ կապի ֆունկցիայի կանչի մշակման համար: Եթե ​​դա որևէ խնդիր չի առաջացնում վիճակագրության հավաքագրման պարզ ռեժիմի համար, ապա SD քարտի վրա PCAP ֆայլերի ձայնագրման ռեժիմի համար մենք ստիպված էինք շրջել՝ կազմակերպելով ձայնագրությունը հիշողության և սեմալիստների հերթի միջոցով: Հաշվի առնելով այն յուրահատկությունը, որ հետ կանչելու գործընթացն աշխատում է մի միջուկի վրա, իսկ SD-ով գրելու գործընթացը՝ մեկ այլ միջուկի վրա։

«Աղմկոտ եթերի» դեպքում որոշ փաթեթներ կորչում են (հերթում տեղ չկա, և դրանք դեն են նետվում), բայց երեկոյան բնակարանի սովորական «եթերային ալիքներով» (5..7 ԱԵԱ տեսանելիության սահմաններում) ձայնագրությունը PCAP-ում ավարտվում է առանց փաթեթի կորստի:

Բացի այդ, PCAP-ի մոնիտորինգի և ձայնագրման համար կա փաթեթների վերնագրերում MAC ցուցակի ֆիլտրման ռեժիմ:

Օրինակ, դուք կարող եք հետևել մարդու արտաքինին ակումբում/սրճարանում, նախքան նա մտնել կամ հայտնվել ձեր տեսադաշտում: Քչերն են անջատում WiFi-ը և ավտոմատ միացումը հայտնի ԱԵԱ-ներին: (Հիմա անջատում եմ...)

Wireshark-ում գրանցված երթևեկությունը դիտելը կրթական և հետաքրքիր է քարտեզները հասկանալու համար, ամեն ինչ աշխատում է:

Գործողության եղանակը Deauth փաթեթներով

Լռելյայնորեն, այս փաթեթների ուղարկումն անջատված է libnet80211.a գրադարանում, որը գալիս է առանց աղբյուրների: Բայց սա հեշտ է ուղղել՝ մի քանի բայթ կարգավորելով: Սկզբում կասկածում էի, թե արժե՞ փակցնել կարկատան։ Բայց տարբեր վայրերում զբոսնելուց հետո, երբ աղբյուրների ուղարկման սկանավորման ռեժիմը միացված էր [վատորոշման շրջանակը], ես մտածեցի. «Ի՞նչ դժոխք»: Ավելին, esp8266-ում այս փաթեթների փաթեթը փակված չէ և github-ում հավաքներ կան esp8266-ի համար։

Շատ տեղերում (չեմ ասի, թե որտեղ) անցանկալի ԱԵԱ-ների ճնշումը կիրառվում է այս մեթոդով։ Եվ սրանք «խուլիգաններ» չեն...

Եվ ես դեռ զարմանում էի, որ իմ հեռախոսի ինտերնետ բաշխումը երբեմն չի աշխատում…

Նման փաթեթների թվին և RSSI-ին հետևելու եղանակը շատ օգտակար է հասկանալու համար, թե «որտեղ ձախ AP-ները չեն սիրում»:

Ուղղորդիչի ռեժիմ

Այս հատկանիշը, հավանաբար, ամենահետաքրքիրն է ուսումնասիրելու համար:

ESP32-ն աջակցում է միաժամանակյա աշխատանքին STA + SoftAP ռեժիմում: Հետեւաբար, դրա վրա հնարավոր է ներդնել դասական NAT երթուղիչ:

Ցանցային կույտին աջակցելու համար Espressif-ն օգտագործում է lwip գրադարանի պատառաքաղը (գործնականում առանց փոփոխության):

Բայց, լռելյայնորեն, ստանդարտ ժողովում, esp-lwip գրադարանում, netif միջերեսների «ap» (SoftAP) և «st» (STA) վերահասցեավորում չի տրամադրվում:

Իհարկե, դա հնարավոր է անել առանց NAT-ի, բայց խնդիր է առաջանում «ap» ինտերֆեյսին երկու կամ ավելի STA-ների միաժամանակյա միացման և «st» ցանցային ինտերֆեյսից «ap»-ին IP հասցեների համաժամացման հետ: Այսպիսով, դժվարությունները չարժեն, և դա ավելի հեշտ է NAT-ի միջոցով:

Ավելին, կա marting-ger-ից պատառաքաղ esp-lwip, որն ավելացնում է NAT-ի պարզ իրականացում IP4-ի համար:

Թեև իմ ձեռքերը քորում էին այն վերամշակել զուտ կոսմետիկորեն (իմ կարծիքով, առանց պատառաքաղի նախագծի ավելի հեշտ կլիներ, բայց LWIP-ի միջոցովՀՈՒԿ գործառույթները, որոնք սահմանված են հավաքման ժամանակ), բայց ծուլությունը հաղթեց, և marting-ger-ի տարբերակը օգտագործվում է այնպես, ինչպես կա:

Երթուղիչի ռեժիմում դիտվում է մուտքային և ելքային IP4 տրաֆիկը:

Մասնավորապես, դրանից այն հանվում է էկրանին ցուցադրելու և ֆայլում վիճակագրություն հավաքելու համար.

  • Սարքի անվանումը, որը միացել է SoftAP ESP32-ին (DHCP փաթեթներ)
  • URL-ը DNS հարցումներից (UDP պորտ 53) ESP32 սարքից, որը միացված է SoftAP-ին:

Բացի այդ, դուք կարող եք միացնել երթևեկության գրանցումը PCAP ֆայլում:

Այս ռեժիմը շատ օգտակար է, օրինակ՝ հասկանալու համար, թե ինչ է ձեր հեռախոսն ուղարկում ցանց և ուր է այն գնում:

Կարող եք նաև մտածել այս ռեժիմն օգտագործելու այլ եղանակների մասին՝ հաշվի առնելով ցանցային ինտերֆեյսի մակարդակով SoftAP ESP32-ի մուտքային և ելքային տրաֆիկը ամբողջությամբ վերահսկելու հնարավորությունը. Ethernet վերնագիր (destMAC[6]+srcMAC[6]+տեսակ[2]) + ծանրաբեռնվածություն (IP4, IP6, DCHP և այլն):

Սկզբունքորեն, ESP32-ը բավականին լավ է հաղթահարում WiFi->WiFi երթուղիչի ֆունկցիան՝ անցնելով իր միջով նորմալ երթևեկության առանց որևէ հատուկ ուշացման: Սուբյեկտիվորեն ESP32-ի երթուղիչի միջոցով միացված հեռախոսի հետաձգումները նկատելի չեն:

Ցավոք, Espressif API-ում չկա տարբերակ՝ զտիչ դնելու MAC-ով, որը միացված է EPS32 SoftAP-ին: Փոխարենը առաջարկվում է «ցտեսություն» (esp_wifi_deauth_sta) ասել արդեն միացված STA-ներին, որոնք «ցանկալի չեն»։

MAC-ի զտումը միացված STA-ների համար պետք է կատարվեր esp_wifi_deauth_sta() հասցեին զանգի միջոցով:

Վերջում

Չնայած ես ESP32-ի հետ աշխատելու առումով ոչ մի նոր բան չեմ մտածել, գուցե ինչ-որ մեկին հետաքրքիր կլինի արդյունքը (աղբյուրային կոդը):

Նշեմ, որ կոդը գրել եմ բացառապես կրթական նպատակներով: Այն հատուկ պատրաստված էր ոչ այնքան հարմար «կոտրելու» և նման բաների համար։

Ես տպագիր տպատախտակ չեմ պատրաստել, քանի որ պատրաստի տախտակները մետաղալարով զոդելու համար պահանջվեց 1.5-2 ժամ:

Եվ եթե դա անեք, ապա պետք է այն հավաքեք ոչ թե պատրաստի տախտակներից, այլ առանձին բաղադրիչներից: Այնուհետեւ չափերը նույնիսկ ավելի փոքր կլինեն:

Source: www.habr.com

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster