ESP32 дээр Wifi-тай тоглоом тоглож байна

ESP32 дээр Wifi-тай тоглоом тоглож байна

WiFi сүлжээг шинжлэх халаасны хэрэгсэл хийх санааг надад өгсөн энэ нийтлэл.

Санаа өгсөн тэдэнд баярлалаа. Надад хийх зүйл байсангүй.

Сүлжээний технологийн чиглэлээр миний мэдлэгийг тэлэх, зугаацах зорилгоор бүх ажлыг хоббиныхоо хүрээнд хийсэн. Энэ он гарснаас хойш аажмаар долоо хоногт 1..4 цаг.
Би ямар ч практик хэрэглээг төлөвлөөгүй. Тэдгээр. Энэ бол хакерын хэрэгсэл БИШ.

Одоогоор төлөвлөсөн бүх функцууд ажиллаж байна. Бүх эх сурвалж, угсрахад бүрэн бэлэн, энд нийтэлсэн. Мөн угсралтын заавар гэх мэт. Энэ тэмдэглэлд би github дээр байрлуулсан мэдээллийг хуулбарлахгүй. Би зөвхөн тусад нь тайлбарлах шаардлагатай гэж үзсэн зүйлээ л хэлэх болно.

"Бүх нийтийн хэрэгсэл" болон ESP32-ийг сонгох болсон шалтгааны талаархи миний бодол

Би өөрийгөө үнэн гэж хэлэхгүй. Хүн бүр өөрийн гэсэн байдаг. Би техник хангамжийн сонголтоо зөвтгөхийг хичээх болно.

Нийтлэлд санал болгосон Линукс (анх Raspberry Pi) + хянагч (STM32) + CC1110 (8051 цөм) хэлбэрийн "дагалдах төхөөрөмжүүд" -ийн хослолыг ашиглах тохиолдол ба тэнд боломжтой бүх зүйлийг багтаах төлөвлөгөө (125 кГц, NFC, 433 мГц, USB, iButton, bluetooth, ?) надад тохирохгүй санагдсан. Гэсэн хэдий ч, энэ төсөл Энэ нь хувийн болон хаалттай хэвээр байх шиг байна (flipper-t github "Энэ байгууллагад олон нийтийн хадгалах газар байхгүй.") бөгөөд тийм ч түгээмэл биш техник хангамж руу шилжсэн.

Магадгүй би буруу байж магадгүй бөгөөд ирээдүйд зохиогчид програм хангамжийн эх сурвалжийг олон нийтэд нээлттэй болгох болно. Хэрэв тийм биш бол би эх кодгүйгээр ийм техник хангамж худалдаж авахгүй.

Миний "хэрэгсэл"-д тавигдах шаардлага

Хайрцаг нь жижиг байх ёстой (бага байх тусмаа сайн).

Иймд:

  • Баригдсан зай шаардлагагүй. Wifi-тай ажиллах үед гүйдэл 100 мА-аас дээш байвал суурилуулсан зай нь том байх эсвэл удаан ажиллахгүй. Тиймээс "хайрцаг" -ыг стандарт цахилгаан банкаар тэжээх хэрэгтэй. Ямар ч байсан халаасандаа/машиндаа цахилгаан банк үргэлж байдаг.
  • Линукс "хайрцаг"-ыг дотор нь багажтай байлга. олон жилийн турш бүх хэл дээр бичигдсэн Жижиг дэлгэцтэй, цөөн тооны хяналтын товчлууруудтай бол энэ нь утгагүй юм. Бүтэн гар, дэлгэц бүхий энгийн зөөврийн компьютер дээр үр дүнг харж/боловсруулж болно.
  • Бүрэлдэхүүн хэсгүүд нь амархан хүртээмжтэй, олон нийтэд танигдсан байх ёстой (боломжтой SDK, олон жишээ, баримт бичиг).

Үүний үр дүнд миний хувьд сонголт нь тодорхой байсан - ESP32.

Намайг арга хэмжээ авахад түлхэц болсон нийтлэлд дурдсан бүх даалгаврын хувьд ESP32-ийн хүчин чадал хангалттай юм. Хэдийгээр миний хамгийн их хийхийг хүсч байгаа зүйл бол:

  • Bluetooth ашиглан тоглоорой.
  • Хамгийн энгийн техник хэрэгслээр 433 мГц давтамжтайгаар тоглоорой (зөвхөн далайцын модуляци нь практик хэрэгцээнд хангалттай).

ESP32 дахь тосонд ниснэ

  • ESP32 SDK (IDF) нь зарим талаараа болхи юм.
  • Зарим функцууд (жишээлбэл, WiFi стек) угсарсан статик номын сан хэлбэрээр эх кодгүй ирдэг.
  • 5 GHz зурвасыг дэмждэггүй бөгөөд WiFi-тай ажиллахад зарим хязгаарлалт, болхи байдаг.

Гэхдээ үнэ / хэмжээ нь эдгээр дутагдлыг бүрэн нөхдөг.

Програм хангамжийн үндсэн функц

Би функцийн талаар товч тайлбарлах болно, энэ талаархи санал бодлоо ...

Тохиргоог удирдах, SD-ээс файл байршуулах

Бүх хөндлөнгийн хяналтыг тусдаа цэсийн зүйлээр эхлүүлсэн энгийн вэб хуудсаар хийдэг. ESP32 нь WiFi AP горимд ажиллаж, тогтмол IP хаягаар хуудсыг харуулдаг.

Хэдийгээр ESP32 цөмүүд нь нэлээд хурдан байдаг ч туршилтаас харахад суурилуулсан вэб үйлчилгээ болон жишээлбэл чиглүүлэгчийн горим зэрэг нь тийм ч нийцэхгүй байна. Тиймээс динамик хяналт байхгүй бөгөөд хуудас нь бусад бүх горимд байхгүй.
Түүнээс гадна судалгааны зорилгоор динамик хяналт шаардлагагүй.

Beacon багцтай ажиллах горим

Горимууд нь энгийн бөгөөд тийм ч сонирхолтой биш юм. "Боломжтой учраас" хийсэн. Шалгах зорилгоор.
Албан ёсны Espressif жишээнүүдэд жишээнүүд бий.

AP жагсаалт скан хийх горим.
Үнэндээ ямар ч ухаалаг утас үүнийг хийж чадна.
За, энэ горимд AP жагсаалт хадгалагдах болно.
Гэрэлтэгч спам.
ESP32 нь далд SSID болон санамсаргүй MAC бүхий AP хэлбэрээр эхэлж, урьдчилан үүсгэсэн SSID жагсаалтын дагуу (гараар үүсгэсэн эсвэл өмнө нь AP жагсаалтыг сканнердсан) дагуу [цахилгаан дохионы хүрээ] илгээж эхэлдэг.

WiFi пакет үнэрлэх горим

Espressif хөгжүүлэгчид нь хэрэглээний программ хангамжийг буцаан залгах функцээр дамжуулан "агаарт нисч буй" бүх WiFi пакетуудыг хүлээн авах чадварыг нэмсэн. Үнэндээ бүгд биш, учир нь та зөвхөн нэг тогтмол сувгийн горимыг тохируулах боломжтой.

Буцах дуудлагын функцийг боловсруулахад маш хатуу цагийн хязгаарлалт тавьдаг. Хэрэв энэ нь энгийн статистик цуглуулах горимд асуудал үүсгэхгүй бол SD карт дээрх PCAP файл бичих горимын хувьд би санах ой болон семафор дахь дарааллаар бичлэг хийх ажлыг зохион байгуулах шаардлагатай болсон. Буцах дуудлагыг дуудах үйл явц нь нэг цөм дээр, SD руу бичих процесс нь нөгөө цөм дээр явагддаг онцлогийг харгалзан үзнэ.

"Дуу шуугиантай агаар"-ын үед зарим пакетууд алдагддаг (дараалалд зай байхгүй бөгөөд тэдгээрийг хаядаг), гэхдээ оройн цагаар орон сууцны ердийн "агаар" (үзэгдэх орчинд 5..7 AP), PCAP дээр бичлэг хийдэг. пакет алдалгүйгээр дуусгавар болно.

Нэмж дурдахад, PCAP-ийн хяналт, бичлэгийн хувьд пакетийн толгой хэсэгт MAC жагсаалтад суурилсан шүүлтүүрийн горим байдаг.

Жишээлбэл, та клуб/кафед байгаа хүнийг орохоос нь өмнө эсвэл нүдэнд харагдахаас нь өмнө түүний гадаад төрхийг хянах боломжтой. Цөөхөн хүн WiFi болон мэдэгдэж буй AP-тай автомат холболтыг идэвхгүй болгодог. (Би одоо унтрааж байна..)

Wireshark-д бүртгэгдсэн замын хөдөлгөөнийг үзэх нь газрын зургийг ойлгоход сургамжтай бөгөөд сонирхолтой байдаг - энэ бүхэн ажилладаг.

Үхлийн багцтай ажиллах горим

Анхдагч байдлаар, эх сурвалжгүйгээр ирдэг libnet80211.a номын санд эдгээр багцыг илгээхийг хориглодог. Гэхдээ хэд хэдэн битийн өөрчлөлтөөр үүнийг засахад хялбар байдаг. Эхэндээ би засвар оруулах нь зүйтэй болов уу гэдэгт эргэлзэж байсан. Гэхдээ таних хүрээг сканнердах горим асаалттай өөр өөр газруудаар алхсаны дараа би "ямар чөтгөр вэ" гэж бодсон. Түүнчлэн, esp8266-д эдгээр багцын хүргэлт хаагдаагүй бөгөөд esp8266-д зориулсан github дээр угсралтууд байдаг.

Олон газар (хаана хэлэхгүй) энэ аргаар хүсээгүй AP-ыг дарах аргыг ашигладаг. Эдгээр нь "танхайрсан" биш ...

Мөн миний утаснаас интернет түгээх зарим газар ажиллахгүй байгаад би бас гайхсан ...

Ийм пакетуудын тоо болон RSSI-г хянах горим нь "зүүн AP-ууд хаана дургүй байгааг" ойлгоход маш хэрэгтэй.

чиглүүлэгчийн горим

Энэ онцлог нь судлахад хамгийн сонирхолтой нь байж магадгүй юм.

ESP32 нь STA + SoftAP горимд нэгэн зэрэг ажиллахыг дэмждэг. Тиймээс та үүн дээр сонгодог NAT чиглүүлэгчийг хэрэгжүүлж болно.

Сүлжээний стекийг дэмжихийн тулд Espressif нь lwip номын сангийн сэрээ (бараг өөрчлөгдөөгүй) ашигладаг.

Гэхдээ стандарт хувилбарт esp-lwip номын сан нь "ap" (SoftAP) ба "st" (STA) интерфейсүүдийн хооронд дамжуулалтыг өгдөггүй.

Мэдээжийн хэрэг, та үүнийг NAT-гүйгээр хийж болно, гэхдээ хоёр ба түүнээс дээш STA-г 'ap' интерфейстэй зэрэг холбож, 'st' сүлжээний интерфэйсээс 'ap' руу IP хаягуудыг синхрончлоход асуудал гардаг. Тиймээс бэрхшээлүүд нь үнэ цэнэтэй зүйл биш бөгөөд NAT-ээр дамжуулан илүү хялбар байдаг.

Нэмж дурдахад martin-ger-ийн сэрээ esp-lwip байдаг бөгөөд энэ нь IP4-д зориулсан NAT-ийн энгийн хэрэгжилтийг нэмдэг.

Хэдийгээр миний гар үүнийг цэвэр гоо сайхны аргаар дахин хийх гэж загатнаж байсан (миний бодлоор энэ нь төслийн салаагүйгээр хялбар байсан, гэхдээ LWIP-ээр дамжуулан).ХОЁР угсралтын явцад тодорхойлсон функцууд), гэхдээ залхуурал давамгайлж, Мартин-герийн сонголтыг байгаагаар нь ашигласан.

Чиглүүлэгчийн горимд орж ирж буй болон гарч буй IP4 урсгалыг хардаг.

Тодруулбал, дэлгэцэн дээр харуулах, статистикийг файл болгон цуглуулахын тулд дараахь зүйлийг гаргаж авсан болно.

  • SoftAP ESP32 (DHCP пакетууд)-д холбогдсон төхөөрөмжийн нэр
  • SoftAP ESP53-д холбогдсон төхөөрөмжөөс DNS хүсэлтийн (UDP порт 32) URL.

Нэмж дурдахад та PCAP файл руу замын хөдөлгөөний бичлэгийг идэвхжүүлж болно.

Энэ горим нь жишээлбэл, таны утас сүлжээнд юу илгээж, хаашаа явж байгааг ойлгоход маш хэрэгтэй.

Та сүлжээний интерфейсийн түвшинд softAP ESP32 орж ирж буй болон гарч буй траффикийг бүрэн хянах чадварыг харгалзан энэ горимыг ашиглах өөр аргуудын талаар бодож болно: Ehernet толгой (destMAC[6]+srcMAC[6]+төрөл[2]) + ачаалал (IP4, IP6, DCHP гэх мэт төрөл).

Зарчмын хувьд ESP32 нь WiFi->WiFi чиглүүлэгчийн функцийг маш сайн даван туулж, ердийн урсгалыг ямар ч онцгой сааталгүйгээр дамжуулдаг. Субъектив байдлаар, ESP32 дээрх чиглүүлэгчээр холбогдсон утасны саатал нь мэдэгдэхүйц биш юм.

Харамсалтай нь Espressif API-д SoftAP EPS32-д холбогдсон MAC-д шүүлтүүр тохируулах чадвар байхгүй. Үүний оронд аль хэдийн холбогдсон, "хүсээгүй" STA-д "баяртай" (esp_wifi_deauth_sta) гэж хэлэхийг санал болгож байна.

Холбогдсон STA-д зориулсан MAC-аар шүүлтийг esp_wifi_deauth_sta() дуудлагаар хийх шаардлагатай байв.

Эцэст нь хэлэхэд

Хэдийгээр би ESP32-тэй ажиллах хүрээнд шинэ зүйл гаргаж ирээгүй ч үр дүн нь (эх код) хэн нэгэнд сонирхолтой байх болов уу.

Код нь зөвхөн боловсролын зорилгоор бичигдсэн гэдгийг тэмдэглэхийг хүсч байна. "Хакердах" гэх мэтийн хувьд үүнийг зориуд тийм ч тохиромжтой биш болгосон.

Бэлэн ороолтыг утсаар гагнахад 1.5-2 цаг зарцуулсан тул би хэвлэмэл самбар хийгээгүй.

Хэрэв та үүнийг хийвэл бэлэн хавтангаас биш, харин бие даасан бүрэлдэхүүн хэсгүүдээс угсрах хэрэгтэй. Дараа нь хэмжээсүүд нь бүр бага байх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх