بازی با Wifi در ESP32

بازی با Wifi در ESP32

چیزی که به من ایده ساخت یک ابزار جیبی برای تجزیه و تحلیل شبکه های WiFi را داد این مقاله.

با تشکر از آنها برای ایده. من فقط کاری برای انجام دادن نداشتم.

تمام کارها به عنوان بخشی از یک سرگرمی با هدف سرگرمی و گسترش دانش من در زمینه فناوری های شبکه انجام شد. به آرامی، 1..4 ساعت در هفته، از ابتدای امسال.
من برای استفاده عملی برنامه ریزی نکردم. آن ها این ابزار یک هکر نیست.

در حال حاضر، تمام عملکردهای برنامه ریزی شده کار می کنند. تمام منابع، کاملا آماده برای مونتاژ، در اینجا ارسال شده است. همچنین دستورالعمل های اسمبلی و غیره وجود دارد. در این یادداشت، اطلاعات ارسال شده در github را کپی نمی کنم. من فقط آنچه را که لازم می دانم به طور جداگانه شرح دهم به شما خواهم گفت.

نظر من در مورد "ابزار جهانی" و دلیل انتخاب ESP32

من ادعا نمی کنم که حقیقت دارم. هرکسی خودشو داره من سعی خواهم کرد انتخاب سخت افزار خود را توجیه کنم.

در مقاله پیشنهاد شده است استفاده از ترکیبی از لینوکس (در ابتدا Raspberry Pi) + "وسایل جانبی" به شکل یک کنترلر (STM32) + CC1110 (8051 هسته) و برنامه برای جمع کردن همه چیز در آنجا (125kHz، NFC، 433mHz، USB، iButton، بلوتوث، ?) برای من مناسب به نظر نمی رسید. با این حال، این پروژه به نظر می رسد خصوصی و بسته باقی می ماند (flipper-zero github "این سازمان هیچ مخزن عمومی ندارد.") و به سمت سخت افزار نه چندان رایج رفت.

شاید من اشتباه می کنم و در آینده نویسندگان منابع نرم افزار را در دسترس عموم قرار می دهند. اما اگر نه، پس من چنین قطعه سخت افزاری را بدون کد منبع نمی خریدم.

الزامات من برای "ابزار"

جعبه باید کوچک باشد (هرچه کوچکتر بهتر).

بنابراین:

  • بدون نیاز به باتری داخلی با جریان بیش از 100 میلی آمپر هنگام کار با Wifi، باتری داخلی یا بزرگ خواهد بود یا دوام زیادی نخواهد داشت. بنابراین، اجازه دهید "جعبه" توسط یک پاوربانک استاندارد تغذیه شود. به هر حال من همیشه یک پاوربانک در جیب / ماشینم دارم.
  • یک "جعبه" لینوکس با ابزارهای داخل آن نگه دارید، در طول سالیان متمادی به همه زبان ها نوشته شده است با یک صفحه نمایش کوچک و مجموعه ای ناچیز از دکمه های کنترل، منطقی نیست. نتایج را می توان روی یک لپ تاپ معمولی با صفحه کلید و صفحه نمایش کامل مشاهده / پردازش کرد.
  • کامپوننت ها باید به راحتی در دسترس و به طور گسترده شناخته شوند (SDK موجود، بسیاری از نمونه ها و مستندات).

در نتیجه، برای من، انتخاب واضح بود - ESP32.

برای تمام وظایف ذکر شده در مقاله که مرا ترغیب به اقدام کرد، قابلیت های ESP32 کاملاً کافی است. اگرچه بیشترین کاری که هنوز می خواهم انجام دهم این است:

  • با بلوتوث بازی کنید.
  • با ساده ترین سخت افزار با محدوده 433 مگاهرتز بازی کنید (فقط مدولاسیون دامنه، که برای نیازهای عملی کافی است).

پرواز در پماد در ESP32

  • ESP32 SDK (IDF) تا حدودی دست و پا چلفتی است.
  • برخی از عملکردها (به عنوان مثال پشته WiFi) بدون کد منبع در قالب کتابخانه های ثابت مونتاژ شده ارائه می شود.
  • باند 5 گیگاهرتز پشتیبانی نمی شود و محدودیت ها و ناشیانه ای در کار با وای فای وجود دارد.

اما قیمت/سایز این کاستی ها را کاملاً جبران می کند.

عملکرد اصلی نرم افزار

من به طور خلاصه عملکرد و نظر خود را در مورد ...

مدیریت تنظیمات و آپلود فایل ها از SD

تمام کنترل های خارجی از طریق یک صفحه وب ساده انجام می شود که در یک آیتم منوی جداگانه راه اندازی شده است. ESP32 در حالت WiFi AP شروع می شود و صفحه ای را با یک آدرس IP ثابت نمایش می دهد.

اگرچه هسته‌های ESP32 بسیار سریع هستند، همانطور که آزمایش‌ها نشان داده‌اند، عملکرد همزمان سرویس وب داخلی و، به عنوان مثال، حالت روتر چندان سازگار نیستند. بنابراین، کنترل پویا وجود ندارد و صفحه در همه حالت های دیگر در دسترس نیست.
علاوه بر این، کنترل پویا برای اهداف تحقیقاتی مورد نیاز نیست.

حالت کار با بسته های Beacon

حالت ها پیش پا افتاده و چندان جالب نیستند. ساخته شده "چون ممکن است." برای بررسی
نمونه هایی در نمونه های رسمی اسپرسف وجود دارد.

حالت اسکن لیست AP.
در واقع، هر گوشی هوشمندی می تواند این کار را انجام دهد.
خوب، در این حالت لیست AP ذخیره خواهد شد.
هرزنامه Beacon.
ESP32 به‌عنوان یک AP با یک SSID مخفی و یک MAC تصادفی شروع می‌شود و براساس فهرستی از پیش ساخته‌شده از SSID (که به صورت دستی ایجاد شده یا با اسکن لیست AP به دست آمده‌اند) [قاب چراغ نور] را شروع می‌کند.

حالت بوییدن بسته WiFi

توسعه‌دهندگان Espressif این قابلیت را برای نرم‌افزارهای کاربردی اضافه کرده‌اند که می‌توانند تمام بسته‌های وای‌فای «پرواز در هوا» را از طریق عملکرد برگشت تماس دریافت کنند. در واقع نه همه، زیرا فقط می توانید حالت را برای یک کانال ثابت تنظیم کنید.

محدودیت‌های زمانی بسیار سختی برای پردازش یک تابع برگشت اعمال می‌شود. اگر این برای حالت ساده جمع‌آوری آمار مشکلی ایجاد نمی‌کند، پس برای حالت ضبط فایل PCAP روی کارت SD مجبور شدم ضبط را از طریق یک صف در حافظه و سمافورها سازماندهی کنم. با در نظر گرفتن این ویژگی که فرآیند فراخوانی تماس مجدد بر روی یک هسته اجرا می شود و فرآیندی که در SD می نویسد در هسته دیگر.

در طول "هوای پر سر و صدا"، برخی از بسته ها گم می شوند (در صف جایی وجود ندارد و آنها دور ریخته می شوند)، اما با یک "هوا" معمولی یک آپارتمان در عصر (5..7 AP در محدوده دید)، ضبط در PCAP بدون از دست دادن بسته کامل می شود.

علاوه بر این، برای نظارت و ضبط PCAP، یک حالت فیلتر بر اساس لیست MAC در هدر بسته ها وجود دارد.

به عنوان مثال، شما می توانید ظاهر یک فرد را در یک باشگاه/کافه حتی قبل از اینکه وارد شود یا در مقابل دیدگان ظاهر شود، ردیابی کنید. تعداد کمی از افراد وای فای و اتصالات خودکار به APهای شناخته شده را غیرفعال می کنند. (الان خاموشش میکنم..)

مشاهده ترافیک ثبت شده در Wireshark برای درک نقشه ها آموزشی و جالب است - همه کار می کنند.

حالت کار با بسته های deauth

به طور پیش فرض، ارسال این بسته ها در کتابخانه libnet80211.a که بدون منبع ارائه می شود ممنوع است. اما با چند بیت اصلاح آن آسان است. در ابتدا شک داشتم که آیا ارزش ارسال پچ را دارد یا خیر. اما پس از قدم زدن در مکان‌های مختلف با روشن بودن حالت اسکن قاب احراز هویت، فکر کردم: "چه جهنمی." ضمناً در esp8266 تحویل این بسته ها بسته نیست و مونتاژهایی در github برای esp8266 وجود دارد.

در بسیاری از جاها (نمی گویم کجا) از سرکوب APهای ناخواسته از طریق این روش استفاده می شود. و اینها "قلدر" نیستند...

و همچنین تعجب کردم که توزیع اینترنت من از گوشی من در بعضی جاها کار نمی کند ...

حالت ردیابی تعداد و RSSI چنین بسته‌هایی برای درک اینکه «جایی که APهای چپ آن را دوست ندارند» بسیار مفید است.

حالت روتر

این ویژگی احتمالاً جالب ترین از همه برای کشف است.

ESP32 از عملکرد همزمان در حالت STA + SoftAP پشتیبانی می کند. بنابراین، می توانید یک روتر کلاسیک NAT را روی آن پیاده سازی کنید.

برای پشتیبانی از پشته شبکه، Espressif از یک فورک (تقریباً بدون تغییر) از کتابخانه lwip استفاده می کند.

اما، به طور پیش‌فرض، در ساخت استاندارد، کتابخانه esp-lwip ارسال بین رابط‌های netif 'ap' (SoftAP) و 'st' (STA) را ارائه نمی‌کند.

البته، می‌توانید این کار را بدون NAT انجام دهید، اما با اتصال همزمان دو یا چند STA به رابط «ap» و همگام‌سازی آدرس‌های IP از رابط شبکه «st» به «ap» مشکلی وجود دارد. بنابراین دشواری ها ارزش آن را ندارند و از طریق NAT آسان تر است.

علاوه بر این، یک فورک esp-lwip از martin-ger وجود دارد که اجرای ساده NAT را برای IP4 اضافه می کند.

اگرچه دستانم برای بازسازی صرفاً از نظر زیبایی خارش داشتند (به نظر من بدون دوشاخه پروژه آسان تر بود، اما از طریق LWIPHOOK توابع تعریف شده در هنگام مونتاژ)، اما تنبلی غالب شد و گزینه مارتین-گر همانطور که هست استفاده می شود.

در حالت روتر، ترافیک ورودی و خروجی IP4 مشاهده می شود.

به ویژه موارد زیر برای نمایش روی صفحه و جمع آوری آمار در یک فایل از آن استخراج می شود:

  • نام دستگاهی که به SoftAP ESP32 (بسته‌های DHCP) متصل شده است.
  • URL از درخواست‌های DNS (پورت UDP 53) از دستگاه متصل به SoftAP ESP32.

علاوه بر این، می توانید ضبط ترافیک را در یک فایل PCAP فعال کنید.

این حالت بسیار مفید است، مثلاً برای اینکه بفهمید تلفن شما چه چیزی را به شبکه می فرستد و به کجا می رود.

با در نظر گرفتن توانایی کنترل کامل ترافیک ورودی و خروجی softAP ESP32 در سطح رابط شبکه، می توانید راه های دیگری برای استفاده از این حالت در نظر بگیرید: هدر Ehernet (destMAC[6]+srcMAC[6]+type[2]) + محموله (نوع IP4، IP6، DCHP، و غیره).

در اصل، ESP32 به خوبی با عملکرد روتر WiFi->WiFi کنار می‌آید و بدون تاخیر خاصی از ترافیک عادی عبور می‌کند. از نظر ذهنی، تاخیر در تلفن متصل شده از طریق روتر در ESP32 قابل توجه نیست.

متأسفانه Espressif API توانایی تنظیم فیلتر برای MAC متصل به SoftAP EPS32 را ندارد. درعوض، پیشنهاد می‌شود به STAهایی که قبلاً متصل شده‌اند و «دلخواه» نیستند، «خداحافظ» (esp_wifi_deauth_sta) بگویید.

فیلتر کردن توسط MAC برای STAهای متصل باید از طریق فراخوانی esp_wifi_deauth_sta() انجام شود.

در نتیجه

اگرچه من در چارچوب کار با ESP32 به چیز جدیدی نرسیدم، شاید نتیجه (کد منبع) برای کسی جالب باشد.

من می خواهم توجه داشته باشم که این کد صرفاً برای اهداف آموزشی نوشته شده است. برای "هک" و غیره، عمداً چندان راحت ساخته نشده است.

من یک برد مدار چاپی درست نکردم زیرا 1.5-2 ساعت طول کشید تا روسری های تمام شده با سیم لحیم شوند.

و اگر این کار را انجام دهید، باید آن را نه از تخته های آماده، بلکه از اجزای جداگانه مونتاژ کنید. سپس ابعاد حتی کوچکتر خواهد شد.

منبع: www.habr.com

اضافه کردن نظر