WiFi-радар для сбора MAC-адресов
Стоимость: 6000 руб. Есть тариф без абонентской платы.
Прибор сканирует сеть Wi-Fi и ловит запросы (probe request) на поиск сетей от всех находящихся в радиусе 50 метров смартфонов.
В запросах содержится название сети к которой обычно подключается смартфон, уровень сигнала по которому можно определить на каком расстоянии находится смартфон от радара и MAC-адрес смартфона.
Смартфон излучает эти пакеты независимо от того, подключен ли он к какой либо сети Wi-Fi или нет!
По MAC-адресу можно определить производителя смартфона.
Данные с WiFi радара
Все запросы автоматически выгружаются на облачные сервера для хранения, анализа и выгрузки в системы контекстной рекламы.
Собранная аудитория автоматически выгружается в рекламные системы Яндекс Директ и myTarget.
На сервере в удобном WEB-интерфейсе можно просматривать отчеты и графики по посещаемости клиентов за любой период и выгружать данные для дальнейшей таргетированной рекламы.
Виды WiFi радаров
Wi-Fi радары бывают стационарные (требуется подключение к питанию и наличие Ethernet) и мобильные (работают автономно от аккумулятора, передают данные по сети GSM).
Стационарный wifi радар
Стационарные радары вай фай как правило используются для установки в магазинах, кафе, ресторанах и других местах, где есть проводной интернет и питание 220 Вольт или USB.
Пример стационарного WiFi-радара: https://my-beacon.ru/wifi-radar-targeting/
Стационарный wi-fi радар помимо сбора данных о клиентах также можно использовать для контроля сотрудников и отправки PUSH-уведомлений в мобильное приложение проходящим клиентам.
Мобильный wifi радар
Мобильный wifi radar (или беспроводной/беспроводный) позволяет собирать MAC-адреса на любых мероприятиях: на выставках, презентациях, встречах, в торговых комплексах и т.д.
Данный тип радаров нашел популярность для сбора аудиторий на проводимых тематических мероприятиях, т.к. их посещает лояльно настроенная аудитория которую в дальнейшем легко перевести в разряд своих клиентов показав интересную рекламу.
WiFi аналитика
В отчетах системы WiFi-аналитики можно посмотреть сколько клиентов каждый день проходят мимо точки продаж оснащенной wi-fi радаром, сколько клиентов находятся в его зоне заданное время (например в магазине или кафе проводят более 20 минут) и сколько клиентов проходят мимо.
Полученная статистика помогает отслеживать посещаемость клиентов и оценивать эффективность проведенных рекламных кампаний.
Конверсия клиентов по MAC-адресам
Установив несколько WiFi радаров можно определить популярные маршруты по магазину или выставке, точки интереса клиентов и строить тепловые карты.
Тепловая карта по WiFi радарам
Таргетированная реклама
Основным назначением радара WiFi является сбор MAC-адресов смартфонов для показа таргетированной рекламы.
При этом для рекламы осуществляется геотаргетинг, т.е. рекламыне объявления и баннеры показываются только тем клиентам, которые проходили мимо точки продаж, магазина или кафе, заходили внутрь, или например присутствовали на выставке/мероприятии.
Площадки для wifi таргетинга, т.е. площадки для показа баннерной и контекстной рекламы позволяют взаимодействоать с пользователем (который прошел мимо радара) показывая ему рекламу на огромном количестве сайтов рунета.
В данный момент основные площадки, поддерживающие таргетированный показ рекламы по собранным MAC-адресам смартфонов это Яндекс ( Яндекс Аудитории и Яндекс Директ) и Mail.ru ( система myTarget ).
В Яндекс реклама показывается при поиске по заданным фразам, а также в РСЯ.
Рекламная Сеть Яндекса (РСЯ) — это несколько тысяч самых популярных сайтов рунета, на которых отображаются текстовая и баннерная реклама. Среди самых популярных ресурсов, на которых клиенты увидят ваш рекламный retargeting можно выделить следующие: avito.ru, auto.ru, rabota.ru, mamba.ru и тысячи других площадок.
В состав премиальной аудиторной сети MYTARGET входят следующие площадки (данные на начало 2019 года):
vkontakte.ru одноклассники.ру am.ru banki.ru 100km.ru youla.ru Авто@Mail.Ru Ответы@Mail.Ru 7days.ru 7ya.ru Дети@Mail.Ru Здоровье@Mail.Ru Игры@Mail.Ru Кино@Mail.Ru Леди@Mail.Ru Недвижимость@Mail.Ru Новости@Mail.Ru Погода@Mail.Ru Почта@Mail.Ru Спорт@Mail.Ru adme.ru aif.ru avtovzglyad.ru baby.ru cosmo.ru disgustingmen.com dni.ru drive2.ru eadaily.com eg.ru eurosport.ru fontanka.ru gismeteo.ru glavbukh.ru goodhouse.ru graziamagazine.ru hello.ru Hi-tech@Mail.Ru inopressa.ru inosmi.ru irr.ru ixbt.com iz.ru kakprosto.ru lifehacker.ru m24.ru matchtv.ru mk.ru newsru.com novayagazeta.ru ntv.ru ohotniki.ru restate.ru rg.ru ria.ru russian.rt.com sibnet.ru sovsport.ru spbvoditel.ru spletnik.ru sport-express.ru sportbox.ru starhit.ru svpressa.ru teleprogramma.pro travelata.ru vokrug.tv wday.ru woman.ru womanhit.ru znak.com zr.ru
Список рекламных площадок постоянно увеличивается.
Преимущества таргетированной рекламы
Среди преимуществ таргетированной рекламы по MAC адресам можно выделить следующие:
Дополнительные сервисы которые дает WiFi-радар
Помимо своего основного назначения Wi-Fi радар позволяет использовать дополнительные сервисы, такие как контроль персонала и отправка рекламных PUSH-уведомлений на смартфоны клиентов.
Контроль персонала по WiFi и Bluetooth
По желанию заказчика WiFi радар может быть укомплектован сверхтонкими bluetooth метками (брелками) с протоколом iBeacon. Выдав такие метки сотрудникам магазина вы можете контролировать время прихода и ухода сотрудников, обеденное время, а также строить различные отчеты по эффективности работы и просматривать в режиме реального времени местоположение персонала.
Контроль сотрудников по wifi
PUSH-уведомления
В случае если у заказчика есть мобильное приложение, которым пользуются клиенты или заказчик планирует разработать такое мобильное приложение, то появляется возможность автоматического вывода PUSH-уведомлений при приближении клиента к радару. В PUSH-уведомлении можно выводить текст, фото и видео.
Какой WiFi радар купить
Законность WiFi analytics
Трудности в сборе MAC адресов
В некоторых современных смартфонах для конфиденциальности MAC-адрес подменяется на случайный при каждом запросе на поиск сетей.
Подмена происходит только в том случае, если в данный момент смартфон не подключен к какой-либо сети WiFi.
В результате наши разработчики создали авторский алгоритм выявления и автоматической фильтрации подменных MAC-адресов с помощью анализа производителя, видимых сетей и закономерности в периоде отправки запросов.
Этот алгоритм используется для всех наших клиентов и результаты получаются очень хорошими.
По выборке среди наших клиентов по Москве и Санкт-Петербургу (область недвижимости) за 24 часа получены следующие данные:
Правильных MAC-адресов: 71%
Случайных MAC-адресов: 29% (подменные MAC-адреса)
Из правильных MAC-адресов Яндекс нашел 67% совпадений со своей базой клиентов.
Схожесть пользователей: выше среднего. Т.е. по данной аудитории можно найти похожую аудиторию в Яндекс.
Собрано за день 11407 потенциальных клиентов по MAC-адресам.
Настройка таргетированной рекламы по MAC адресам
Для автоматической выгрузки собранных MAC-адресов в систему контекстной рекламы Яндекс.Аудитории из личного кабинета системы MY BEACON WiFi потребуется не более минуты времени.
Вам нужно зайти в раздел Выгрузка MAC, выбрать устройства и период и нажать кнопку Выгрузить
После успешной загрузки файла в Яндекс Аудиториях появится новый сегмент, который будет обрабатываться около 2 часов.
Выгрузка MAC-адресов с радара
После обработки Яндекс вы сможете посмотреть детальную информацию по сегменту, а также переименовать сегмент.
Сегмент готов. Теперь можно настраивать таргетированную рекламную кампанию.
Для этого в настройках рекламной кампании нажмите Ретаргетинг и подбор аудитории и добавьте вашу собранную по MAC-адресам аудиторию.
Рекламная компания с WiFi радара настроена и готова к запуску.
Wi-Fi радар для сбора MAC-адресов
Сегодня для отслеживания и анализа целевой аудитории, интернет-маркетологи используют не только данные из счетчиков посетителей, но и более продвинутые методы, например сбор MAC-адресов при помощи Wi-Fi сенсора.
Такое устройство можно разместить в кафе, гостинице, кинотеатре, чтобы собрать информацию о посетителях. Статистика показывает, что более 50% пользователей не отключают функцию Wi-Fi на своих смартфонах, что позволяет их отслеживать в режиме реального времени.
Зачем компании собирают MAC-адреса своих клиентов?
Сбор MAC-адресов мобильных устройств активно используется в маркетинге для формирования портрета клиента. Маркетолог выгружает список MAC-адресов в сервис Яндекс.Аудитории, и тем самым, создает сегмент обезличенных пользователей.
После добавления собранных MAC-адресов, сервис подбирает всю известную информацию о владельце устройства (интересы, геолокации, поведение) и формирует список анонимных ID для настройки рекламных кампаний в агрегаторах Яндекса (Директ, Дисплей). В дальнейшем этот сегмент используется для таргетирования рекламных предложений.
Мониторинг MAC-адресов в беспроводных сетях может быть незаконным, особенно в сетях, которыми вы не владеете. Пожалуйста, ознакомьтесь с законами вашей страны. Материал опубликован в ознакомительных целях.
Запуск Wi-Fi радара
Скрипт, который будет работать на базе нашего сенсора, вычисляет количество людей поблизости, используя смартфоны в качестве прокси. Телефоны находящиеся в зоне покрытия определяются на основе фрейм-запросов, так называемых probe request.
Возможное использование howmanypeoplearearound включает в себя: мониторинг окружения и пешеходного движения, сбор MAC-адресов. Вероятно, он был разработан для использования на миниатюрных устройствах, например Raspberry Pi etc.
Подготовка рабочей среды
Для запуска скрипта нам потребуется:
Любая антенна с поддержкой Monitor Mode (режима мониторинга):
Установка Python 3
Python и установщик пакетов pip, должен быть установлен на вашем компьютере. Я использую Ubuntu 18.04, в которой Python уже предустановлен и не хватает только установщика pip:
Установка pip для Python 2.7
Установка pip для Python 3
Установка tshark
Если на компьютере не установлен Wireshark, выполните:
Если установлен, выполните команду для установки tshark:
Затем обновите его для запуска без получения полномочий root:
Установка скрипта
В новых версиях Ubuntu при установке pip могут возникнуть проблемы, как решить проблему Unable to locate package, читайте по ссылке.
Мониторинг устройств
Подключаем антенну к компьютеру и выполняем команду:
Выбираем адаптер для сканирования, кладем рядом с собой устройство, а лучше несколько, с включенной функцией Wi-Fi:
Дожидаемся окончания операции:
Скрипт определил поблизости 6 мобильных устройств. Но, где найти или как вывести MAC-адреса?
Чтобы выгрузить их, воспользуемся флагами из справки, например:
После окончания сканирования, находим в домашней директории файл test.json
Результат сбора MAC-адресов
Точность сканирования
Точность сканирования устройств зависит от того, как часто смартфон проверяет связь с сетью Wi-Fi (что происходит каждые 1–10 минут, если Wi-Fi не отключен).
Ошибки при запуске
Если не работают команды или встречается ошибка «command not found», выполните:
В последнее время появилось много всяких решений для владельцев малого бизнеса, таких как: Привлекаем посетителей и прохожих через Wi-Fi, превращаем их в покупателей. Вам предлагают купить WiFi-Радар для сбора mac-адресов и подписку для активации устройства и доступа к личному кабинету.
Как работает WiFi-Радар?
WiFi-Радар устанавливается в общественном месте кафе, салон красоты, фитнес центр или магазин и когда человек проходит мимо в зоне действия радара с включенным WiFi на телефоне или планшете, его устройство постоянно ищет известные ему сети и WiFi-Радар улавливает его запрос и определяет MAC-адрес (00:AB:CD:EG:11:21) устройства.
Благодаря этому Wi-Fi Радар может сформировать для бизнеса целевую аудиторию пользователей из людей, проходящих мимо вашей торговой точки или заведения и использовать ее для таргетирования рекламы в Яндекс, myTarget, Instagram и других площадках. Данная технология относится к O2O маркетингу, обеспечивающему перетекание аудиторий из онлайн в офлайн и обратно.
Что из себя представляет WiFi-Радар на самом деле?
Это обычные WiFi-маршрутизаторы: роутер GL Inet MiFi или TP-Link или Mikrotik с установленной на них сторонней прошивкой.
Может ли WiFi-Радар определять реальные MAC-адреса?
Это научились обходить за счет прошивки, роутер начинает представляться известной сетью и телефон, узнав сеть, посылает запрос на авторизацию с реальным MAC. Сеть можно сделать известной, например, с названием MT_FREE. В Москве многие используют WiFi в транспорте.
В последних версиях устройств рандомизация MAC-адресов используется даже при подключении с известными сетями. Начиная с Android 8 уже была рандомизация при поиске, в 10 можно включить рандомизацию в том числе для сохранённых сетей и эта опция уже есть в настройках и включена по умолчанию.
Также рандомизация MAC-адресов для сохранённых сетей есть в настройках и включена по умолчанию в iOS 14.
Реальные wi-fi роутеры на Маркете
Пишите свои отзывы о WiFi-Радарах в комментариях.
Эта статья мое личное мнение и оценочное суждение.
Хождение по граблям в чистом поле или как собрать MAC-адреса близлежащих Wi-Fi-устройств
Все свои публичные выступления (благо, их не так много) я начинаю с явного или неявного упоминания тезиса “Наша индустрия — сложная, проблемы могут вскрыться на любом, даже самом очевидном шаге, а оптимистично предполагать, что все будет просто и легко — наивно”. Как ни странно, эта простая мысль, полученная многолетним набиванием шишек, порой является откровением и для более опытных специалистов, хотя, казалось бы, весь оголтелый задор и вера в непогрешимость собственных идей и практик должна была выветриться уже давно. Расскажу байку на этот счет, пример простого, с первого взгляда, проекта.

В один прекрасный день товарищ скинул мне ссылку на интересный стартап. Ребята предлагали представителям малого бизнеса из сферы услуг и продаж поставить у себя точку доступа (с captive portal-ом) для своих клиентов, дабы раздавать интернет, попутно собирая MAC-адреса смартфонов людей, проходящих мимо. Цель сего действия весьма простая — большое количество рекламных сетей позволяют таргетироваться по списку адресов устройств, поэтому, направив рекламную компанию на проходящих мимо пользователей, мы с большой долей вероятности получим новых посетителей (потому что близко и “где-то это я уже видел”). Т.е. такая раздача виртуальных флаеров. Товарищ спросил, как это делается и сможем ли мы такое повторить.
Быстрый гуглеж на тему вскрыл механизм такого сбора данных. WiFi-адаптер запускался в режиме прослушивания эфира и бегал по каналам, захватывая пакеты, анализируя их и агрегируя полученные данные. Существовали и готовые открытые утилиты для этого, например, airodump-ng из состава aircrack-ng. Т.е. для повторения нам надо просто запустить эту утилиту, желательно, на отдельном компактном и носимом устройстве, и запихнуть полученные данные в БД, из которой потом уже доставать готовые списки MAC-адресов для рекламных сетей. Вроде бы задача простая, решаемая за один, максимум — два вечера неспешной работы, почти все готово же.
Разумеется, это оказалось ни разу не так.
Как известно, что позволено Юпитеру, то не разрешено быку. И когда в ход идут одноплатники, то приходится жертвовать, в первую очередь вычислительными ресурсами и памятью. Далее, за жертвой ресурсов идет жертва удобства разработки и отладки — тащить инструменты компиляции на устройство позволит не каждая система.
Первоначально мы хотели взять что-то простое и дешевое, например, коробочки Orange Pi Zero, поставить туда airodump-ng и пробросить данные, выплевываемые утилитой на сервер, где благополучно их сложить в базу. У меня был опыт работы с такими распределенными системами с выделенным центром (правда, там в роли рабочих лошадок выступали виртуальные машины, поднимаемые через API облака этим же самым центром по мере необходимости, но не суть), так что часть кода благополучно перекочевала в новый проект.
Инструментом проброса данных на сервер послужило написанное простейшее Erlang-приложение, которое, как предполагалось, будет выдергивать данные с дампера эфира (парсинг), сериализовать их (родной сериализацией Erlang-а) и передавать через web-сокет на сервер по HTTPS (не вызывая подозрений у DPI-систем и не изобретая собственных протоколов). Процессоры Allwinner H2+, которые использовались в Orange Pi, достаточно мощные, чтобы собираться и отлаживаться прямо на устройстве. Опять же, в теории все хорошо.
На практике началось.
1. как оказалось, встроенный WiFi в Orange Pi годился только на то, чтобы подцепиться к точке доступа и швырнуть данные в сервер. Ну, точнее, не сам адаптер, а поддержка его чипсета в ядре. Для большинства IoT проектов этого, наверняка, было бы достаточно. Впрочем, к этому удару мы были готовы, потому что предварительное изучение сайта aircrack-ng дало вполне четкое и неоднозначное “везде это работать не будет, если что — мы не виноваты, список проверенных чипсетов прилагаем”. В списке обнаружились почти все устройства Atheros (купленной Qualcomm) и Ralink (купленной MediaTek), что внушало некоторые перспективы в случае перехода с прожорливых китайских ARM-ов на более аскетичные MIPS-ы из чипсетов для роутеров.
Но, пока это все собирается из соплей и палок, т.е. прототипируется — надо решить проблему здесь и сейчас. Поэтому мы воспользовались такой экзотикой в наше технологичное время (когда беспроводная связь есть в любой зажигалке) как Wi-Fi USB-адаптер. Изучение списка совместимости и сопоставление его с ассортиментом ближайшего магазина выдало жертву — DLink DWA-160 в ревизии C1 (это важно, поскольку другие аппаратные ревизии использовали другой чип и вызывали неиллюзорную головную боль в плане принуждения к работе). Двухдиапазонный, не требующий плясок с драйвером, поскольку поддержка давно в ядре, этот свисток пригодился в дальнейшем и в эксплуатации в других проектах, поэтому я скупил их, наверное, все (пять штук), что оказались доступны в нашем провинциальном городе.
Убедившись в работоспособности устройства, я подключил его к одноплатнику и выключил встроенный WiFi-адаптер с расчетом, что интернет будет доступен через Ethernet-интерфейс.
Вторую свинью подложил aircrack-ng. Этот набор утилит был создан с целью взлома проверки на проникновение WiFi-сетей, т.е. был написан хакерами для хакеров. Не знаю, благодаря какой логике они предпочли использовать дампер эфира беспроводных сетей не в виде традиционного unix-way подхода выплюнуть структурированный текст для последующей обработки, а сделать полноценный term-интерфейс, на котором почти в реальном времени (и с учетом настроек терминала) отображать информацию по обнаруженным сетям и устройствам, но они сделали именно так. Да, я нашел Python API неизвестной степени готовности ко всему этому, но, опять же, паук прототипирования, обитавший в моей голове, жестко запретил тащить еще один язык, переключаться на другой (мы же помним, серверная часть уже была частично готова и написана она была далеко не на Python-е) или, упаси боже, реализовывать airodump-ng самостоятельно на базе tcpdump-а. А, следовательно, надо было искать обходные пути.
К счастью, беспроводные хакеры начали что-то подозревать, что постоянно тупить в интерфейс — такое себе занятие, поэтому реализовали периодическое выкладывание всего найденного и агрегированного в виде CSV-файлов. С задаваемым интервалом. С этим уже можно жить. Разумеется, наивный вариант — запустить утилиту и перечитывать файл по таймеру — тут же дал по рукам. Работающий на ноутбуке, при переносе на одноплатник, он начал сбоить в процессе вычитывания файла по понятным причинам — порой утилита просто не успевала выгрузить все и часть данных безвозвратно терялась.
Решением этого стал механизм inotify в ядре, уведомляющий об файловых операциях — как только мой код видел изменения файла с данными, он инициировал его чтение с небольшой задержкой (скорее, имеющей чисто психологическое значение, успокоить его автора). Проведенные опыты показали, что в этом случае сбоев при чтении и потерь данных не возникает. Ну славно, парсим CSV, укладываем во внутренние структуры и передаем на сервер. На сервере сохраняем в PostgreSQL (спасибо за jsonb) и после этого уже можно делать запросы, формировать выгрузки и т.д. Добавим простейшей авторизации по симметричному ключу, чтобы нам туда не напихали мусора и мы могли бы привязать данные к точке, где установлено устройство, и вроде бы все хорошо, можно в бой.
Ага, сейчас, как же. Тестовая сборка этой цепочки (а написание кода и отладка заняла действительно пару вечеров) вскрыла забавный факт — количество адресов, пойманных за сутки в нашем офисе, достаточно удаленном от публичных проходимых мест, колебалось в районе пары тысяч штук. Да, конечно, рядом была небольшая гостиница (это было в докарантинно-изоляционное время, не удивляйтесь), но все равно, что-то много.
Освежив знание по структуре MAC-адреса и вспомнив факт, что мобильные устройства, зачастую, для сокрытия своего истинного MAC-адреса генерируют локальные адреса, я доработал серверную часть простейшим фильтром, вычищающим все broadcast и local адреса на входе. Список сократился на порядок и уже выглядел похожим на правду. Все было готово к полевым испытаниям.
Как известно, при смене локации с теплого и уютного офиса на беспощадные боевые условия прототипы имеют свойство прекращать нормально функционировать, поэтому процесс внедрения должен сопровождаться поставкой карманного инженера, который будет исправлять все всплывшие недочеты. С другой стороны, также хорошо известно, что устройство, не требующее дополнительных плясок с бубном в начале эксплуатации, скорее всего скоро сломается, причем бесповоротно. Это, наверняка, нашло свое отражение в законах Мерфи, но, увы, автору этих строк лень проверять, в каком именно, поэтому сойдемся на термине “закон подлости”.
Первая установка вскрыла сразу кучу недостатков.
Во-первых, большинство китайских плат для прототипирования поставляется с долгосрочной памятью на MicroSD в противовес NAND/NOR flash чипам. Исключение делается только для мощных SoC, явно избыточных для данной задачи. Увы, MicroSD — это непосредственная головная боль эксплуатационщика — окисление контактных площадок, выход из строя SD-карт, зависимость контактов от температуры внутри корпуса (а она немалая, китайские чипы не являются сильно энергоэффективными, а платы, зачастую, и вовсе рассчитываются сразу исходя из пикового энергопотребления, поэтому без дополнительного радиатора ну никак). Так и оказалось, что при выдергивании питания из устройства система приходила в неработоспособное состояние — повреждались файлы с байт-кодом ERTS, после перезагрузки приложение отказывалось работать.
Второй неприятный момент — на точке установки интернет обеспечивался LTE-роутером и был, мягко говоря, посредственного качества, в отличие от офисного провода. Сеть постоянно искрила, приложение часто переподключалось, а то и вовсе умирало от скопившихся в очередях на отправку сообщений.
Конечно, обе проблемы являются преодолимыми, так, например, потеря данных устранялась бы поиском оптимальной комбинации хорошей MicroSD-карты и настроек файловой системы, а нестабильность соединения можно было бы компенсировать предварительной агрегацией данных, короткими сессиями отправки, разряженными по времени и т.п. Но вскрывшиеся проблемы — это повод задуматься, а правильный ли был выбран путь. Необходимость постоянного соединения с сервером ставила крест на событийных сборах данных, когда устройство вешается на внешнюю батарею питания и забрасывается в рюкзак, владелец которого идет на массовое мероприятие, где, понятно, стабильности соединения ожидать не приходится.
Соответственно, следующий шаг был в отказе от серверной части и локализации хранилища данных прямо на устройстве. Кроме того, во избежание долгих и весьма муторных экспериментов с SD-картами, решено было в следующей итерации использовать макетные платы с flash-чипами.
В это момент я вспомнил, что у меня в коллекции есть замечательная плата Carambola 2 от литовских товарищей 8Devices. А если зайти на их сайт, то можно обнаружить еще более компактное устройство на том же чипе под названием Centipede. Прошлые эксперименты с данным классом устройств показали, что Erlang вполне влезает в отведенные 16 МБайт flash-памяти (и еще немного остается приложению). Единственный минус (который, скорее, даже плюс) — это маломощный MIPS и необходимость кросс-компиляции, что делает сборку Erlang-приложения чуть более нетривиальной. Но это был уже известный маршрут, поэтому я заказал парочку Centipede, а сам пока портировал существующую версию, работающую с сервером, на Carambol-у.
Когда приехали компоненты, начался новый этап. Чип AR9331 успешно поддерживался aircrack-ng из коробки, данные можно забирать с Ethernet-интерфейса, последние версии OpenWRT и ERTS собраны и успешно опробованы. Приложение переписано — часть кода переехала в код устройства, данные накапливались в отдельном процессе и периодически сбрасывались в файл в виде сериализованного Erlang-терма. К этому был нарисован простейший web-интерфейс, получающий данные через websocket. Порты для inotify и erlexec благополучно собраны средствами OpenWRT.
Смущало только одно — на данные оставалось 300 килобайт. Не то, чтобы мало, если хранить только MAC-адреса клиентских устройств, но airodump-ng отдает гораздо больше интересной информации, в том числе адреса точек доступа, их ESSID-ы и прочее, которое тоже неплохо было бы запомнить. На всякий случай. Ладно, будем действовать по обстоятельствам.
Собираем, проверяем. С ходу вскрывается проблема.
OpenWRT, как мы все знаем — это такой минималистичный вариант сборки Linux, который предназначен специально для устройств с ограниченными объемами памяти. Как следствие — оттуда выкинуто то, что можно было выкинуть безболезненно, и упрощенно то, что можно было упростить, в том числе многопользовательский режим. Т.е. обычная практика, когда код стартует от root-а и работает с максимальными привилегиями, что, конечно, облегчает вопросы связанные с группами, пользователями и контроль их действий. Да-да, буква S в аббревиатуре IoT отвечает за безопасность. Беда заключается в том, что erlexec, который я использовал для запуска и управления airodump-ng, не может выполнять операции из-под root-а — для этого ему необходим дополнительный пользователь, от имени которого он будет порождать назначенные ему процессы. А при создании дополнительного пользователя с другим уровнем привилегий… правильно, не дает airodump-у достучаться до сетевого устройства. Выкрутить это ограничение из библиотеки показалось процессом небыстрым, поэтому erlexec был заменен на порты — встроенный механизм запуска сторонних процессов в Erlang. Мелочь, а неприятно.
Итак, устройства получены, перепрошиты и даже работают в тепличных условиях. Цепляем батарею, кидаем коробку в рюкзак, идем в молл. На следующий день смотрим на результат — фиаско, файл данных нулевой длины — либо не хватило места, либо передергивание питания сработало не в очень удачный момент. Правим код, чтобы сохранение происходило в два этапа — сначала создавался временный файл, потом он замещал текущий.
Проверить, впрочем, работоспособность этого варианта руки так и не дошли — в поле зрения попала очередная игрушка — Onion Omega2+ на Mediatek 7688. Как и у их собратьев, конструктора LinkIt Smart 7688, там было много всего, но самое главное — вдвое больше flash-памяти, а, значит, уже можно не переживать за нехватку места для хранения данных. Окей.
Заказываем, ждем. Месяц. Два. Терпение лопается — пишем американцам на предмет “где товар, Зин”. Тишина. Открываем спор на PayPal. Американцы просыпаются. Говорят “Ой, у нас система приема заказов сбойнула, сейчас все пришлем”. Высылают, ждем три недели. Фух, устройство на руках и даже работает.
Тут надо сделать небольшое отступление — при том, что у меня в шаговой доступности лежало несколько плат LinkIt Smart, я не рассматривал их в качестве платформы, потому как в самом начале эпопеи попытка использовать их как устройства захвата провалилась. Тогда драйвера для чипа поставлялись в виде собранных модулей под конкретные версии ядра и, видимо, это и стало причиной неработоспособности. В последних версиях OpenWRT появилась как родная поддержка 7688, так и открытый драйвер, так что это повод пересмотреть подход к данным устройствам.
Впрочем, наличие WiFi прямо на чипе было принято использовать по прямому назначению — все-таки устройству нужен хоть какой-нибудь интерфейс управления, причем и в полевых условиях тоже, хотя бы для того, чтобы понять, работоспособно оно или не очень. Посмотреть на полученные данные тоже было бы небесполезно.
Соответственно, комбинируем предыдущие подходы — используем единственный выведенный на MiniDoc USB-интерфейс под WiFi-свисток для сканирования пространства, а встроенный WiFi — для управления устройством в виде маломощной точки доступа. Собираем, проверяем, все работает.
Но аппетит приходит во время еды. Начнем с того, что файл с данными в виде Erlang-сериализации — удел настоящих маньяков, а чуть более широкому спектру специально обученных профессионалов надо что-то попроще. Опять же, помимо складывания данных от airodump-а хотелось бы еще и точное время измерения, и, желательно, хоть какая-то привязка к расположению устройства в пространстве.
Встраиваем между WiFi-свистком и устройством USB-хаб. Настройки (а они зависят от положения устройства на шине в случае OpenWRT) идут лесом, но это уже незначительные мелочи. Правим. Вытаскиваем из завалов USB-GPS приемник, благо, уже проверенный временем и с написанным кодом разбора NMEA-0183 (код, конечно же, все равно пришлось подправить). Проверяем — устройство благополучно не обнаруживается системой, явно нехватка драйверов. Собираем драйвера USB Serial и закидываем на устройство — тоже тишина. Потом вспоминаем, что в больших системах GPS-свисток обнаруживался не как ttyUSBx, а как ttyACMx, т.е. USB GSM modem. Ну отлично, второй заход на добавление драйверов, успех.
Берем код, интегрируем в приложение. Добавляем в приложение sqlite3 в качестве хранилища. Теперь не надо будет проверять наличие записи в состоянии и вообще работа с данными упрощается до небольшого количества строчек. Собираем все в кучу, учим при добавлении данных забирать показания GPS, правим JS-код на мордочке для отображения в случае неполного набора данных (может случится, когда GPS еще не поймал спутники, а данные сканирования эфира уже идут). Проверяем работу — вроде живет. Можно объявлять промежуточную победу.
За пару недель бесперебойной работы — куча данных как по станциям в эфире, так и по клиентам. Теперь борюсь с искушением предложить это устройство инфобезовцам для контроля эфира на вверенных территориях и государству для контроля за перемещением телефонов граждан. Шутка, конечно же, они и так сами все знают.
Так вот, все вышеописанные мытарства — это только pet-проект с очень низкой сложностью (почти сразу было понятно, что и как делать), отсутствием разработки аппаратной части (привет, физика) и выходом на сколько-нибудь более-менее завершенное изделие. Нет, конечно, нельзя исключить, что автор этих строк — дремучий дилетант, а настоящие гуру проходят этот путь за один вечер в промежутке между вечерним чаем и рюмкой коньяка, но пока опыт показывает только одно: ИТ это сложно и оптимизм здесь наказуем финансово, репутационно и мотивационно, а те, кто говорит “там все просто” — либо гении, либо жулики, причем второе более вероятно.











