Все началось с того, что однажды у нас в GS-Labs наметился проект по поиску багов и уязвимостей. Да вот только дошли слухи, что железка, где должно работать приложение, будет хитрая — нельзя поставить root, нет любимого Ethernet. «Органы управления» — только Wi-Fi да пультик управления на несколько кнопочек, а что будет передаваться по Wi-Fi — неизвестно. А хакеры, как ты знаешь, не любят неизвестности! Дома у меня валялись пара отладочных плат на основе ESP32 — ESP32-PICO-KIT, и я решил сделать свой Wi-Fi-сниффер — с блек-джеком и перспективой расширения до Bluetooth-сниффера!
Думаю, ни для кого не секрет, что бал сегодня правят микроконтроллеры семейства STM32Fxxx (цифры и буквы на месте ххх означают класс устройства — от Ultra-low power до High Performance). Но пару лет назад появился «чудо-чип» под названием ESP32 — «старший брат» народного Wi-Fi ESP8266.
Изначально документация на этот чип была очень и очень скудна, но сейчас ситуация кардинально изменилась. Есть прекраснейший user guide, содержащий пошаговые инструкции по всем вопросам — от установки SDK и toolchain для этого микроконтроллера до описания его периферии. Все это приправлено массой примеров, выложенных на Гитхаб. Помимо этого, есть очень хороший блог, где наглядно расписывается, как работать с той или иной периферией.
Надо отдать разработчикам должное, Espressif описывает, как устанавливать toolchain для популярных платформ:
Вся документация представлена в двух вариациях:
Да, забыл упомянуть их шикарный форум, где можно обсудить вопросы, связанные с ESP32. Складывается впечатление, что техподдержка Espressif отвечает достаточно шустро.
В одной из наших статей мы уже упоминали этот чип, поэтому здесь я лишь кратко перечислю основные характеристики:
32-bit MCU Xtensa® single-/dual-core 32-bit LX6 microprocessor(s), который может работать в широком диапазоне частот;
520 Кбайт SRAM;
Фанатам ассемблера производитель сделал царский подгон, любезно предоставив ULP (Ultra Low Power) сопроцессор, который кодится ассемблером и кушает до 150 мкА в режиме Deep-sleep (это для тех, кто хочет максимальной автономности). Да и вообще, не ленись заглянуть в даташит за деталями, там реально много интересного.
Кстати, если к этому моменту я уже внушил тебе сильное желание обзавестись данным чипом и ты уже начал вспоминать пароль от «Алиэкспресса» и адрес ближайшего отделения Почты России, то не спеши. 🙂 Удивительно, но разные варианты ESP32 можно купить у нас, причем порой это может оказаться дешевле и быстрее, чем заказывать из Китая. Например, вот такую двухсантиметровую штуку с возможностью подключения внешней антенны:
можно купить тут или тут примерно за четыре доллара.
Возьму-ка я на себя очень амбициозную миссию: изложить три тысячи страниц стандарта в нескольких предложениях. 🙂 Думаю, что у меня получится, отступать ведь все равно поздно?
Думаю, ты уже знаешь, что Wi-Fi — это «красивое» название, которое скрывает под собой целый набор стандартов 802.11. Вот лишь «некоторая часть» из них:
Поскольку для этого проекта нам нужно знание деталей, а не умение запустить magic-утилиту на wonderful-железке, давай заглянем внутрь 802.11 поглубже. Итак, согласно IEEE 802.11—2012, MAC-фрейм имеет следующую структуру:
Теперь пройдемся по каждому полю, чтобы понимать, за что оно отвечает.
О том, какие бывают Management-, Control- и Data-фреймы, ты прочитаешь, как только закончим рассматривать MAC-заголовок 802.11.
TO_DS, FROM_DS – их стоит рассматривать вместе, и они отвечают за то, как интерпретировать поля Address 1 … Address 4 из заголовка фрейма. Посмотрим на табличку ниже:
Source Address (SA) — MAC-адрес исходного отправителя (твой смарт или ноут, с которого выходишь в паутину).
Четвертый случай (когда оба бита выставлены в единицу) наглядно пояснит вот такая картинка:
Несколько загадочное поле, поскольку смысл, который будет в этих 16 битах, сильно зависит от того, какой у нас фрейм — Data, Control или Management. Как вариант — если у нас Control PS-Poll фрейм (об этом будет сказано дальше), то тут будет содержаться идентификатор AID. А может быть указано время в микросекундах, требуемое для передачи следующего фрагмента в Data Frame.
CYW43907 привлекательна тем, что поддерживает Dual Band (2,4/5 ГГц) и на борту у нее USB 2.0. И что для нас самое интересное — вроде как поддерживает неразборчивый режим. Почему говорю «вроде как» — однозначного упоминания в документации и programming user guide я не встретил, но если посмотреть сюда, то в этой ветке форума говорится, что с SDK 2.4.1 появилась функция wiced_wifi_enable_monitor_mode(), которая позволяет прослушивать эфир и фреймы capture 802.11.
Как видим из картинки выше, делится, в свою очередь, на Fragment Number и Sequence Number. Sequence Number указывает порядковый номер в MSDU-, A-MSDU- или MMPDU-фреймах. Fragment Number указывает номер каждого фрагмента в MSDU- или MMPDU-фреймах. Чтобы более четко понять, как используется Sequence Number в связке с Fragment Number, посмотри на картинку ниже.
Нам надо передать данные размером в 1200 байт, но точка доступа сконфигурирована так, что размер передаваемого фрейма составляет 300 байт. Передача единого сообщения в 1200 байт будет выглядеть следующим образом.
Шестнадцатое поле, которое отвечает quality-of-service в Data frame.
Последнее поле — HT Control, которое может встречаться в MAC-заголовке фрейма 802.11. Стандарт 802.11n расширяет заголовок данных полем размером в четыре байта. Присутствует только в QoS Data и Management фреймах и определяется Order bit из Frame Control.
В поле Body «упаковываются» вышестоящие протоколы.
Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
1 год7190 р. Экономия 1400 рублей! |
1 месяц720 р. 25-30 статей в месяц |
Уже подписан?
Читайте также
Последние новости