
htop для эфира — живая RF-панель управления 802.11 (Wi-Fi) в вашем терминале
htop для эфира — живая RF-панель 802.11 (Wi-Fi) в вашем терминале.
airtop превращает Wi-Fi-трафик вокруг вас в живую терминальную панель — частотный спектр ближайших точек доступа, сигнальные графики для каждой станции, ленту активности по типам кадров, гистограмму RSSI и прокручиваемый список обнаруженных сетей — всё это рисуется с помощью брайля и блочной графики поверх eBPF.
[!TIP] Никакого monitor mode, никаких raw-сокетов. airtop подключает eBPF-программы к
mac80211/cfg80211и читает 802.11-кадры по мере их прохождения через Wi-Fi-стек ядра, поэтому он работает на вашем обычном подключённом интерфейсе, не разрывая соединение.
curl -fsSL https://yeet.cx | sh
yeet run https://github.com/yeet-src/airtop
Для скриншота, которым можно поделиться, анонимизируйте SSID и MAC (ваша сеть и сети соседей будут переименованы в network-01, station-02, …):
yeet run https://github.com/yeet-src/airtop -- --anonymize
Работает до нажатия Ctrl-C. Измените размер терминала — макет перестроится; минимальный размер 80×24.
Чтобы показать соседние сети, ядру нужны результаты сканирования. Ваша ОС сканирует периодически сама, или можно запустить принудительно:
nmcli dev wifi rescan # или: iw dev <iface> scan
Wi-Fi — это семейство стандартов IEEE 802.11. Общая модель:
Всё состоит из кадров. Ваш ноутбук, телефон и маршрутизатор обмениваются короткими радиопакетами, называемыми кадрами. Каждый кадр содержит MAC-адреса, и один из них (BSSID) идентифицирует точку доступа, к которой он относится.
Три класса кадров:
| Класс | Примеры | Назначение |
|---|---|---|
| Управляющие (Management) | Beacon, Probe, Auth, Assoc, Deauth | объявлять сети, подключаться и отключаться |
| Контрольные (Control) | ACK, RTS/CTS | координация, кто может передавать |
| Данные (Data) | ваш реальный трафик | передача полезной нагрузки |
Точки доступа передают маячки (beacon). AP объявляет о себе примерно 10 раз в секунду, отправляя beacon-кадр с именем сети (SSID) и BSSID. Так формируется список Wi-Fi на вашем телефоне, и так airtop обнаруживает точки доступа.
Каналы и частота. Wi-Fi работает в диапазонах (2,4 ГГц, 5 ГГц, 6 ГГц), каждый разделён на каналы, и каждый канал — это центральная частота в МГц (канал 6 ≈ 2437 МГц, канал 161 ≈ 5805 МГц). Радио слушает один канал за раз, поэтому вы в основном видите трафик на своём канале.
Уровень сигнала (RSSI) измеряется в dBm. Значения всегда отрицательные, и чем ближе к нулю, тем сильнее сигнал:
| RSSI | качество |
|---|---|
| −30 … −50 dBm | отлично (рядом с источником) |
| −50 … −67 dBm | хорошо |
| −67 … −80 dBм | приемлемо |
| −80 … −90 dBм | слабый / пограничный |
В основном домашние пользователи, которые отлаживают нестабильный Wi-Fi, и сетевые администраторы, выбирающие каналы перед мероприятием.
Каждая панель соответствует описанным выше концепциям:
Заголовок — время работы, общее количество кадров, активные станции, обнаруженные точки доступа, количество beacon-кадров, количество deauth-кадров (красным, если не ноль), и ваш текущий канал. Счётчик deauth — за ним стоит следить; в здоровых сетях он равен нулю.
Частотный спектр — каждая обнаруженная точка доступа отображается как «горб» сигнала, расположенный на её реальной центральной частоте по оси МГц. Высота и цвет показывают RSSI; подпись — SSID + dBm. Перекрывающиеся горбы показывают помехи на совпадающем канале — классический вид Wi-Fi-анализатора и ответ на вопрос «почему Wi-Fi медленный».
RSSI × время — брайлевский линейный график для каждой активной станции, показывающий изменение её сигнала за последние несколько секунд. Наблюдайте, как затухает сигнал, когда устройство отходит от точки доступа, или как он скачет, когда кто-то передвигает ноутбук.
Лента кадров — тепловая карта типов кадров по времени; цвет ячейки = сколько кадров этого типа поступило за интервал. Всплеск deauth-кадров мгновенно подсвечивает эту строку — это шаблон тревоги, который вам нужен.
Гистограмма сигнала — распределение принятых кадров по RSSI. «Форма» вашей RF-среды: узкий пик около −50 dBm означает, что вы рядом с одной сильной точкой доступа; размазывание от −60 до −80 — перегруженная среда.
Точки доступа — обнаруженные SSID с каналом, индикатором сигнала и dBm, отсортированные от самого сильного.
Один BPF-объект (airtop.bpf.c) подключает две fentry-программы и передаёт события в пользовательское пространство через кольцевые буферы:
| Перехватчик | Что захватывается |
|---|---|
fentry/ieee80211_rx_list | каждый принятый 802.11-кадр: тип/подтип, адреса, RSSI из ieee80211_rx_status |
fentry/cfg80211_inform_bss_frame_data | каждую точку доступа, которую обнаружило ядро: SSID, канал, сигнал |
Панель работает в среде выполнения V8 от yeet, подписываясь на эти кольцевые буферы и отрисовывая терминальный интерфейс:
main.js точка входа: размер tty, цикл отрисовки, привязка/подписка BPF
state.js живые данные + обработка кадров/сканирования
render.js ANSI, цветовые градиенты, брайлевские холсты/графики (чистые)
dashboard.js панели + компоновка (renderDashboard)
[!IMPORTANT] Linux с BTF:
CONFIG_DEBUG_INFO_BTF=yиCONFIG_DEBUG_INFO_BTF_MODULES=y. По умолчанию включено в текущих Arch, Fedora, Ubuntu и Debian 12+. CO-RE означает, что не нужна перекомпиляция под каждое ядро.
cfg80211/mac80211 (любая обычная Wi-Fi-карта на Linux).curl -fsSL https://yeet.cx | sh.[!NOTE] Чего airtop не делает:
tx_status.fentry на практике стабильны, но не являются ABI ядра; точные данные зависят от вашего Wi-Fi-драйвера.Нужен ли monitor mode? Нет. В этом и суть. airtop подключается к Wi-Fi-стеку ядра изнутри, поэтому он работает на вашем обычном подключённом интерфейсе.
Сбросит ли он моё соединение? Нет. Переключения режима не происходит; ваш интерфейс остаётся подключённым к тому, к чему был подключён. airtop просто наблюдает за тем, что ядро уже делает.
Почему я вижу только одну или две сети?
Потому что ваше радио большую часть времени слушает один канал (свой). Соседние сети появляются, когда ваша ОС выполняет периодическое сканирование, или если вы запускаете принудительное nmcli dev wifi rescan / iw dev <iface> scan. Полный обзор диапазона требует monitor mode + переключения каналов — это другой инструмент.
Это законно? Пассивное наблюдение за 802.11-кадрами в воздухе вокруг вас законно в большинстве юрисдикций; ваше радио уже принимает их, и airtop просто показывает, что есть. Активное вмешательство (панель deauth обнаруживает атаки, но не выполняет их) — это уже другая история. Если вы используете корпоративную сеть, проверьте политику использования.
Чем это отличается от Kismet, airodump-ng или Wireshark? Эти инструменты делают больше в monitor mode: полный покадровый захват, экспорт в PCAP, дешифровка. airtop работает на вашем обычном интерфейсе и даёт обзорную панель «с первого взгляда». Для пентеста используйте airodump-ng. Чтобы узнать, почему оборвался звонок, используйте этот инструмент.
make # генерирует include/vmlinux.h, собирает bin/airtop.bpf.o
make vmlinux # принудительно обновить заголовок типов ядра
make clean
Требуется clang (для BPF) и bpftool; libbpf/libbpf-dev из вашего дистрибутива для заголовков. Сгенерированные include/vmlinux.h и bin/ добавлены в .gitignore.
GIF создаётся с помощью VHS из assets/airtop.tape:
vhs assets/airtop.tape # -> assets/airtop.gif
Он запускает airtop «за кадром», чтобы GIF открывался уже на живой панели. Во время записи запускайте сканирование Wi-Fi в другой оболочке, чтобы заполнить спектр и список AP.
BPF-программа распространяется под лицензией GPL (SEC("license") = "GPL"), как того требуют используемые ею вспомогательные функции ядра.
Создано yeet. yeet — это среда выполнения Linux для написания программ eBPF и живых системных панелей на JavaScript.