Привет, Хабр! Меня зовут Алексей, и я продолжаю копаться в беспроводных технологиях. В прошлый раз мы настраивали Wi-Fi в OpenWrt для максимальной стабильности и покрытия. Сегодня я хочу поговорить о другой, не менее увлекательной теме — мониторинге беспроводного эфира с помощью легедарного роутера TP-Link MR3020.Многие скажут: «Зачем мне это? У меня и так всё работает». А я отвечу: возможности, которые открываются, могут удивить. Давайте сразу к делу.
Зачем вообще мониторить эфир?
Сценариев масса, и они далеко не всегда связаны с безопасностью (хотя и там тоже).
1. Геофенсинг и аналитика посещаемости
Представьте, что вы владелец небольшого кафе, магазина или коворкинга. Вам нужно понять, сколько людей заходит в течение дня, в какие часы пик, как долго они задерживаются. Установив роутер с OpenWrt в режиме монитора у входа, вы можете пассивно подсчитывать уникальные устройства (смартфоны, ноутбуки) в радиусе действия. Это даёт понимание реального трафика посетителей — без камер, просто по факту присутствия Wi-Fi устройств. Данные можно агрегировать в CSV и строить графики — идеально для маркетинга и планирования персонала.
2. Выбор занятого, но наименее используемого канала для своей точки доступа
Самый частый кейс: вы живёте в многоквартирном доме, эфир забит соседскими роутерами, скорость проседает, пакеты теряются. Запустив мониторинг на несколько часов, вы получите объективную картину загруженности каналов и сможете выбрать тот, где меньше всего конкурентов ведут вещание. То есть простые программки для мониторинга wi-fi умеют показывать занятые каналы но вот понять насколько активно используются занятые каналы они не умеют.
3. Диагностика проблем своей сети
Упала скорость? Пропадает связь? Мониторинг покажет, не забил ли кто-то из соседей канал, не появились ли новые мощные точки доступа, нет ли скрытых помех. Вы увидите уровень сигнала, количество ретрансляций, CTS-кадры — всё, что нужно для настоящего инженерного анализа.
4. Маркетинговый Wi-Fi рада — было раньше но сейчас не так
Раньше (лет 5–7 назад) был популярен метод идентификации посетителей по MAC-адресу для показа целевой рекламы: человек заходил в торговый центр, его телефон «светился» в эфире, система запоминала MAC и потом могла показывать ему рекламу в соцсетях. Но сейчас смартфоны (iOS и Android) используют рандомизацию MAC-адресов — при каждом сканировании сетей телефон подставляется с разным виртуальным MAC. Поэтому надёжно идентифицировать конкретное устройство по MAC стало почти невозможно. Однако для приблизительной оценки потока (сколько уникальных клиентов в единицу времени) рандомизация не страшна — мы считаем не конкретного человека, а количество активных устройств, и погрешность приемлема.
Что будем использовать
Я буду использовать старенький но достаточно удачный роутер TP-Link MR3020 Да он имеет только одно радио 2.4 но зато его можно использовать в связке с повербанком и носить с собой.
-
OpenWrt
-
USB-флешка — её можно смонтировать и сохранять на ней логи. Я же заморочился и перенес файловую систему на флешку. Получив таким образом и дополнительное место для установки пакетов.
-
Немного терпения и прямые руки.
Весь роутер будет работать как пассивный датчик — он ничего не передаёт, только слушает. По сути это то не точка доступа, а радио-сниффер.

Шаг 1. Настройка /etc/config/wireless для режима монитора
Для начала убедимся, что Wi-Fi интерфейс переведён в режим монитора. Я не буду описывать установку OpenWrt — это отдельная тема. Предположим, у вас уже есть работающая система.
Открываем конфиг:
vi /etc/config/wireless
Скорее всего, у вас есть секция типа wifi-device (например, radio0) и одна или несколько wifi-iface. Нам нужно создать отдельный интерфейс в режиме monitor. Не трогайте существующие, если они нужны для раздачи интернета — просто добавьте новую секцию (Иногда нужно оставить только один wifi-iface. Но тогда позаботьтесь чтобы к роутеру можно было подключиться через LAN-разъем):
config wifi-iface option device 'radio0' option mode 'monitor' option ifname 'mon0' option hidden '1'
Где:
-
device— имя вашего радио. -
mode 'monitor'— включает режим монитора. -
ifname 'mon0'— имя создаваемого интерфейса (можно любое). -
hidden '1'— просто скрывает его от лишних глаз.
После сохранения применяем:
wifi reload
И проверяем, что интерфейс появился:
ifconfig mon0
Если увидели что-то типа следующего, значит все в порядке:

Шаг 2. Установка airodump-ng — классика жанра
airodump-ng это часть пакета aircrack-ng, который есть в репозиториях OpenWrt. Он не только захватывает пакеты, но и в реальном времени отображает таблицу сетей и клиентов.
opkg updateopkg install aircrack-ng
Запуск и базовые опции
Самый простой запуск:
airodump-ng mon0
Вы увидите две таблицы:

-
Верхняя — все обнаруженные точки доступа (BSSID, канал, уровень сигнала, шифрование, SSID).
-
Нижняя — клиенты (их MAC, ассоциированная точка, мощность).
Для сохранения в файл используем ключ -w:
airodump-ng -w /mnt/usb/capture --output-format csv mon0
Форматы вывода airodump-ng
Утилита умеет сохранять данные в разных форматах. Управляется флагом --output-format (или -o). Рассмотрим самые полезные.
CSV (самый удобный для аналитики)
Создаёт файл .csv, который можно открыть в Excel, Google Sheets или импортировать в базу данных. Структура: сначала строки с точками доступазатем через пустую строку — строки с клиентами. Именно этот формат я использую для сбора статистики посещаемости.
PCAP (для глубокого анализа)
Файл .cap или .pcap — это «сырые» 802.11 кадры с radiotap-заголовками. Можно открыть в Wireshark и анализировать каждый пакет. Занимает много места, но даёт максимум информации.
IVS (только для WEP)
Файл .ivs — сохраняет только векторы инициализации. Для современных WPA/WPA2 сетей бесполезен, оставьте для ностальгии.
Мой совет: для долгосрочного сбора статистики используйте только
csv. Он лёгкий, структурированный и содержит всё необходимое. Для точечной диагностики проблем — включайтеpcapна короткое время.
Иногда можно собирать pcap данные используя старый добры tcpdump. Он делает ровно одну вещь, но делает её идеально — захватывает пакеты и пишет их в файл. Никакого лишнего анализа, минимум накладных расходов. Процессор почти не грузит, память не ест.
Установка
opkg install tcpdump
Если хотите минимальную версию (чуть меньше размером), есть пакет tcpdump-mini, но он конфликтует с полным. Я расширил файловую систему роутера за сет флешки поэтому могу себе поставить полный.
Захват
tcpdump -i mon0 -s 0 -W 10 -G 3600 -C 100 -w /mnt/usb/capture_%Y%m%d_%H%M%S.pcap
-
-i mon0— интерфейс. -
-s 0— захватывать пакет целиком. -
-w— запись в файл.
-
-W 10— хранить не более 10 файлов (циклическая запись). -
-G 3600— каждые 3600 секунд (1 час) создавать новый файл. -
-C 100— ограничить размер файла 100 МБ. -
%Y%m%d_%H%M%S— временная метка в имени файла.
Такой командой можно мониторить неделями, не боясь переполнить флешку. Старые файлы будут перезаписываться.
Что внутри pcap-файла?
Откроем дамп в текстовом виде (или через Wireshark). Или предварительно можно сконвертировать его в txt с помощью того же tcpdump.

Типы кадров (краткий ликбез)
-
Beacon — маяк точки доступа. Содержит SSID, поддерживаемые скорости, канал, шифрование. Периодичность ~100 мс. По количеству Beacon можно оценить, сколько AP вещают на канале.
-
Probe Request / Probe Response — клиент ищет сеть; AP отвечает. Используется для обнаружения скрытых SSID.
-
Data — пользовательские данные. Зашифрованы (IV, KeyID). Вы не прочитаете содержимое, но увидите факт передачи.
-
Acknowledgment (ACK) — подтверждение приёма кадра. Каждый Data кадр (кроме широковещательных) порождает ACK. Много ACK → активный обмен.
-
Clear-To-Send (CTS) — разрешение на передачу (часть RTS/CTS). Если в эфире много CTS, значит, есть коллизии или скрытые станции.
-
Block Acknowledgment (BA) — подтверждение для агрегированных кадров (802.11n/ac). Признак высокоскоростного режима.
Как практически использовать эти данные?
-
Оценка загруженности канала
Подсчитайте количество Data-кадров за минуту на определённой частоте. Чем их больше, тем выше нагрузка. Сравните с количеством ACK — они должны быть примерно равны (если не считать повторы). -
Выявление помех
Если на канале много CTS и BA, но мало Data, значит, эфир перегружен или есть скрытые станции. Роутеры вынуждены резервировать время, снижая полезную пропускную способность. -
Обнаружение скрытых сетей
В столбце Probed ESSIDs у клиентов могут быть имена сетей, которых нет в верхней таблице. Это скрытые сети, которые не транслируют Beacon, но клиенты их активно ищут. Кстати по этой опции можно чуть точнее идентифицировать клиентов, даже с учетом рандомизации маков. -
Мониторинг «здоровья» своей точки доступа
Если вы видите много повторных передач (retries) или необычно много CTS от вашего BSSID, возможно, у вас проблемы с антенной или сильные помехи.
Автозпуск
Для того чтобы мониторинг запускался автоматически сразу после загрузки роутера, можно создать соответствующую задачу в cron или добавить скрипт запуска в /etc/rc.local
#!/bin/sh# Даем системе время на инициализацию (60 секунд должно быть достаточно)sleep 60# Папка, куда смонтирована флешка, у меня фся фйловая система лежит # на флешке поэтому я просто пишу /root MOUNT_POINT="/root"# Базовое имя для файловOUTPUT_FILE="${MOUNT_POINT}/wifi_24_capture"# Убиваем старые процессы airodump-ng (после загрузки роутера их быть не должно)# но вдург вы решите запустить скрипт рукамиkillall airodump-ng# Запускаем airodump-ng в фоновом режиме с записью в CSV-файлairodump-ng mon1 -w "$OUTPUT_FILE" --output-format csv --write-interval 60
Главный нюанс: не забудьте добавить sleep 60 перед стартом мониторинга, чтобы успели подняться все интерфейсы.
P.S. У меня есть пара кейсов по использованию данной штуки для подсчёта аналитики проходимости и эффективности торговой точки (сколько человек прошло мимо, сколько вошло внутрь, как долго находились и т.д.) и ещё один — для детального анализа трафика. Если это кому-то интересно, напишите мне в комментариях, и я подготовлю статью на эту тему.
ссылка на оригинал статьи https://habr.com/ru/articles/1024498/