
Локальный графический интерфейс для набора инструментов аудита беспроводных сетей aircrack-ng.
Локальный веб-интерфейс для набора беспроводных инструментов aircrack-ng.
Скриншоты · Быстрый старт · Возможности · Дорожная карта · Участие в разработке
[!WARNING] Используйте это только на сетях, которыми вы владеете или на тестирование которых у вас есть письменное разрешение. Сканирование, деаутентификация или перехват трафика сетей, которыми вы не управляете, в большинстве мест незаконны. См. Правовое и ответственное использование.
AirmonGUI объединяет airmon-ng, airodump-ng, aireplay-ng и aircrack-ng в одном веб-приложении, которое работает на вашей собственной машине. Вы включаете режим монитора, сканируете сети, захватываете WPA-рукопожатие и взламываете его, переходя по подписанным формам, вместо того чтобы запоминать флаги.
Оно не переписывает ни один из инструментов. Бэкенд вызывает настоящие бинарники и разбирает их вывод, так что вы видите именно то, что реально сделал набор. Интерфейс привязан к 127.0.0.1, и API никогда не выходит за пределы вашей машины.
Набор aircrack-ng отличный, но рабочий процесс разбит на четыре отдельные команды и множество флагов, которые нужно держать в голове: перевести карту в режим монитора, переключать каналы, чтобы найти цель, зафиксироваться на BSSID, запустить деаутентификацию на правильном канале, дождаться четырёхстороннего рукопожатия, а затем скормить захват словарю. Промахнётесь с каналом — и деаутентификация уйдёт в никуда. Забудете --bssid — и ваш захват будет полон шума.
Я хотел превратить всю эту последовательность в набор экранов, которые проводят вас по ней, показывают, что в эфире, и следят за состоянием между шагами. Именно это здесь и есть. Это хорошо подходит для изучения того, как атаки ведут себя на самом деле, для лабораторных работ и для ускорения авторизованной оценки.
Рабочий процесс идёт сверху вниз по боковой панели. Вот каждый экран.
Сети, BSSID и клиенты на скриншотах ниже — это синтетические демонстрационные данные, а не реальный захват.
Выберите интерфейс, проверьте его драйвер, чипсет и PHY и включите режим монитора. Когда закончите, освободите именно этот интерфейс.

Запустите задание airodump-ng и наблюдайте, как таблица заполняется точками доступа и клиентами по мере их обнаружения. Отфильтруйте таблицу, затем отправьте любую сеть прямо в процесс деаутентификации или захвата рукопожатия.

Анализ сигнала присваивает каждой точке доступа оценку, так что сильные, но слабо защищённые точки с активными клиентами поднимаются наверх. Он также показывает, насколько загружен каждый канал и какую защиту используют окружающие сети. Ваши собственные устройства помечаются, чтобы вы случайно не направили атаку на себя по ошибке.

Этот экран фиксирует airodump-ng на BSSID и канале цели, запускает движок автоматической деаутентификации, чтобы сбросить клиентов и заставить их переподключиться, и становится зелёным в тот момент, когда захвачено четырёхстороннее рукопожатие.

Направьте aircrack-ng на захват и словарь. Журнал транслируется по мере работы, и если парольная фраза есть в вашем списке, она появится вверху.

Отдельная деаутентификация с фиксацией канала, историей запусков и разобранным выводом событий:

Управление файлами захвата:

История команд сеанса:

Вам понадобятся Linux, root, беспроводной адаптер с поддержкой режима монитора и набор aircrack-ng в вашем $PATH. Полный список см. в разделе Требования.
# 0. Install the suite (Debian, Ubuntu, Kali)
sudo apt update && sudo apt install aircrack-ng wireless-tools
# 1. Clone
git clone https://github.com/ELHart05/AirmonGUI.git
cd AirmonGUI
# 2. Backend (terminal 1)
cd backend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
sudo -E .venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000
# 3. Frontend (terminal 2)
cd frontend
npm install
npm run dev
Откройте http://localhost:5173. Интерфейс общается только с 127.0.0.1:8000.
При первом подключении интерфейс запрашивает API-токен. Бэкенд выводит его в консоль при запуске, примерно так:
======================================================================
AirmonGUI API token (generated for this run):
Xy3k...long-random-string...
Paste it into the AirmonGUI web UI when prompted.
======================================================================
Вставьте этот токен в экран разблокировки. Чтобы сохранить фиксированный токен между перезапусками, задайте AIRMON_GUI_AUTH_TOKEN в backend/.env (бэкенд загружает этот файл при запуске). Каждый маршрут API, кроме проверки состояния, требует этот токен — именно он не позволяет случайному локальному процессу или веб-странице, которую вы просматриваете, управлять беспроводными инструментами за вашей спиной. Вы должны явно задать токен, прежде чем привязывать бэкенд к чему-либо, кроме 127.0.0.1, — иначе он откажется запускаться.
Если запрос токена — лишь лишнее препятствие на однопользовательской машине, задайте AIRMON_GUI_AUTH_ENABLED=false, чтобы полностью отключить аутентификацию; тогда интерфейс пропустит экран разблокировки. При выключенной аутентификации бэкенд отказывается привязываться куда-либо, кроме loopback: укажите API_HOST на что-то отличное от 127.0.0.1, и он не запустится.
Root необходим, потому что airmon-ng, airodump-ng и aireplay-ng используют сырые сокеты. Вызывайте .venv/bin/uvicorn напрямую, а не просто uvicorn, поскольку sudo сбрасывает PATH и иначе не найдёт виртуальное окружение; флаг -E сохраняет все заданные вами переменные AIRMON_GUI_*. Если вы предпочитаете не запускать сервер от root, настройте sudo без пароля для этих конкретных бинарников и внесите изменения в backend/app/utils.py.
cd frontend
npm run build # writes static files to frontend/dist/
Раздавайте frontend/dist/ любым статическим файловым сервером и проксируйте /api/* и WebSocket /ws/* на процесс Uvicorn.
| Слой | Стек |
|---|---|
| Бэкенд | Python 3.11+, FastAPI, Uvicorn, Pydantic v2 |
| Фронтенд | Vue 3, Vite 5, Tailwind CSS 3, lucide-vue-next, xterm.js |
| Сайт | React 18, TypeScript, Vite, Tailwind (необязательная лендинговая страница в website/) |
AirmonGUI
├── backend/ FastAPI REST API and WebSocket, one route module per tool
│ app/routes/ (interfaces, airodump, aireplay, aircrack, handshake, captures)
│ app/models.py (validated Pydantic I/O), app/state.py (in-process job registry)
│ app/utils.py (subprocess and sudo logic), app/config.py (env config)
│
├── frontend/ Vue 3 single-page app, the control console
│ views/ (Overview, Monitor, Scan, Signal, Deauth, Handshake, Crack, Captures, Reports, Terminal, Logs)
│ composables/ (reactive job and state logic), api/ (fetch wrappers)
│
└── website/ Standalone React landing site (optional)
Бэкенд предоставляет REST API по адресу http://127.0.0.1:8000/api и терминальный WebSocket по адресу /ws/terminal (защищён API-токеном; отключается с помощью AIRMON_GUI_TERMINAL_ENABLED=0). В режиме разработки dev-сервер Vite на :5173 проксирует оба на бэкенд.
Интерактивные схемы доступны по адресам http://127.0.0.1:8000/docs (Swagger UI), /redoc и /openapi.json, пока бэкенд запущен.
Пока аутентификация включена (по умолчанию), каждая конечная точка, кроме /api/health и /api/auth/status, требует заголовок X-Auth-Token (см. Быстрый старт о том, откуда берётся токен). В Swagger UI кнопка Authorize отправляет его за вас. При AIRMON_GUI_AUTH_ENABLED=false токен не требуется (только loopback).
Бэкенд работает со значениями по умолчанию, указанными ниже, поэтому эти переменные нужны только для их изменения. Задайте их в backend/.env (загружается при запуске) или экспортируйте перед запуском Uvicorn; экспортированная переменная имеет приоритет над файлом. Полный список см. в backend/.env.example.
"Could not lock wlan0 to channel N" или скан без сетей. Почти всегда интерфейс всё ещё находится в управляемом режиме. Именно режим монитора позволяет адаптеру захватывать трафик и менять каналы. Сначала включите его на вкладке Monitor (или командой airmon-ng start wlan0), затем сканируйте на интерфейсе монитора — часто это wlan0mon, хотя некоторые драйверы сохраняют исходное имя. Сканирование отклоняет управляемый интерфейс именно с такой подсказкой, а одноканальное сканирование больше не прерывается, если предварительную фиксацию канала не удалось проверить, поскольку airodump-ng сам настраивает канал.
Сети видны при первом запуске, но не при втором. Оставшийся интерфейс монитора или NetworkManager, снова захвативший адаптер между запусками, могут оставить его в зависшем состоянии. Запустите airmon-ng check kill (кнопка Check Kill) перед сканированием и останавливайте сканирование перед запуском нового на том же интерфейсе.
Помощь с любым из этих пунктов приветствуется. См. Участие в разработке.
hashcat для взлома на GPUЕсть идея? Откройте issue. Запросы функций и вопросы приветствуются.
Pull request'ы приветствуются: чем меньше и сфокусированнее изменение, тем лучше.
uvicorn) и фронтенд (npm run dev) оба запускаются без ошибок.В каждой папке есть свой README с примечаниями: backend, frontend, website.
Если проект вам полезен, звезда поможет другим людям найти его и подскажет мне, что стоит продолжать.
AirmonGUI предназначен для авторизованного тестирования беспроводных сетей, исследований и обучения на сетях, которыми вы владеете или на оценку которых у вас есть письменное разрешение.
Перехват трафика и деаутентификация сетей или устройств, которыми вы не управляете, незаконны в большинстве юрисдикций. Значения по умолчанию не зря держат и API, и dev-сервер на loopback — не открывайте их в общей или публичной сети. Авторы не несут ответственности за неправомерное использование. Используя это программное обеспечение, вы подтверждаете, что у вас есть разрешение на каждую сеть и устройство, к которым вы обращаетесь.
Используйте его, чтобы понимать и защищать сети, а не атаковать сети, которые вам не принадлежат.
MIT, см. LICENSE. Создан на основе проекта aircrack-ng, который выполняет всю основную работу.
| Область | Что делает |
|---|
| Режим монитора | Включает или выключает режим монитора на выбранном интерфейсе с помощью airmon-ng. Отдельное действие check-kill запускает airmon-ng check kill, когда фоновые службы, такие как NetworkManager, блокируют режим монитора. |
| Сканирование сети | Запускает задания захвата airodump-ng и показывает точки доступа и клиентов в таблице реального времени, которую можно фильтровать по имени, безопасности или диапазону. |
| Анализ сигнала | Ранжирует точки доступа по степени их уязвимости к атаке (сила сигнала, слабая защита, активные клиенты) и строит графики загруженности каналов и распределения типов защиты в зоне действия. |
| Деаутентификация | Отправляет точечную или широковещательную деаутентификацию через aireplay-ng, сначала переводя интерфейс на канал точки доступа, чтобы кадры долетели. |
| Захват рукопожатия | Трёхшаговый процесс, который фиксирует airodump-ng на цели, запускает движок автоматической деаутентификации и самостоятельно обнаруживает четырёхстороннее WPA-рукопожатие. |
| Взлом | Передаёт захват и словарь в aircrack-ng, транслирует журнал в реальном времени и показывает восстановленный ключ в тот момент, когда он появляется. |
| Управление захватами | Просмотр, фильтрация, массовый выбор и удаление файлов .cap, .csv, .pcap, .ivs и .log, которые создаёт набор. |
| Встроенный терминал | Настоящая PTY-оболочка (xterm.js) на случай, когда нужна сырая командная строка в том же окне. |
| Журналы команд | Каждая команда, выполненная в сеансе, с stdout, stderr, статусом и копированием в один клик. |
| Метод | Конечная точка | Описание |
|---|
| GET | /api/health | Проверка состояния сервера (без токена) |
| GET | /api/auth/status | Включены ли аутентификация и терминал (без токена) |
| GET | /api/auth/verify | Подтверждает, что предоставленный токен действителен |
| GET | /api/toolcheck | Проверяет, установлены ли инструменты aircrack-ng |
| GET | /api/interfaces | Перечисляет беспроводные интерфейсы с MAC и статусом режима монитора |
| POST | /api/monitor | Запускает или останавливает режим монитора |
| POST | /api/checkkill | Запускает airmon-ng check kill для остановки мешающих служб |
| GET | /api/airodump/jobs | Перечисляет выполняющиеся и известные задания захвата |
| POST | /api/airodump/start | Запускает задание сканирования airodump-ng |
| POST | /api/airodump/stop | Останавливает задание сканирования по id |
| GET | /api/airodump/results/{job_id} | Разобранные результаты сканирования (сети и клиенты) |
| POST | /api/aireplay/deauth/start | Запускает задание деаутентификации |
| GET | /api/aireplay/deauth/jobs | Перечисляет задания деаутентификации |
| GET | /api/aireplay/deauth/{job_id}/status | Опрашивает задание деаутентификации |
| POST | /api/aireplay/deauth/{job_id}/stop | Останавливает задание деаутентификации |
| POST | /api/handshake/start | Запускает захват рукопожатия для конкретной цели |
| GET | /api/handshake/jobs | Перечисляет задания захвата рукопожатия |
| GET | /api/handshake/{job_id}/status | Опрашивает статус обнаружения рукопожатия |
| POST | /api/handshake/{job_id}/stop | Останавливает захват рукопожатия |
| GET | /api/aircrack/jobs | Перечисляет задания взлома |
| GET | /api/aircrack/validate?path=<file> | Проверяет, содержит ли захват рукопожатие |
| POST | /api/aircrack/crack | Запускает задание aircrack-ng со словарём |
| GET | /api/aircrack/{job_id}/status | Опрашивает статус взлома и последние строки журнала |
| POST | /api/aircrack/{job_id}/stop | Останавливает задание взлома |
| GET | /api/captures | Перечисляет файлы захвата |
| GET | /api/captures/cap | Перечисляет взламываемые файлы .cap, .pcap и .ivs |
| DELETE | /api/captures/{filename} | Удаляет файл захвата |
| WS | /ws/terminal | Интерактивный PTY-терминал (включён по умолчанию; защищён токеном; отключается с помощью AIRMON_GUI_TERMINAL_ENABLED=0) |
| Переменная | По умолчанию | Описание |
|---|
AIRMON_GUI_CAPTURE_DIR | /var/lib/airmongui/captures | Куда записываются файлы захвата (создаётся с правами 0700; каталог должен быть приватным и принадлежать владельцу) |
AIRMON_GUI_AUTH_ENABLED | true | Установите false, чтобы полностью убрать требование токена (только loopback) |
AIRMON_GUI_AUTH_TOKEN | (генерируется) | API-токен. Если не задан, генерируется и выводится при запуске; обязателен для привязки вне loopback |
AIRMON_GUI_TERMINAL_ENABLED | 1 | Оболочка /ws/terminal, защищённая токеном; установите 0, чтобы удалить маршрут и скрыть вкладку |
AIRMON_GUI_MAX_ACTIVE_JOBS | 8 | Ограничение количества одновременных заданий инструментов |
CORS_ORIGINS | http://localhost:5173 | Допустимые источники через запятую |
API_HOST | 127.0.0.1 | Хост, к которому привязывается Uvicorn |
API_PORT | 8000 | Порт, на котором слушает Uvicorn |
AIRMON_GUI_ENV_FILE | backend/.env | Путь к env-файлу для загрузки; пустая строка пропускает загрузку |
export AIRMON_GUI_CAPTURE_DIR=/home/user/captures
sudo -E .venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000
| Требование | Примечания |
|---|
| Linux (ядро 4.x+) | Протестировано на Kali Linux и Ubuntu 22.04 |
| Беспроводной адаптер с режимом монитора | Например, Atheros AR9271 или другой распространённый чипсет для пентеста |
| Набор aircrack-ng | airmon-ng, airodump-ng, aireplay-ng, aircrack-ng в $PATH |
wireless-tools (iwconfig) | Используется для настройки каналов |
| Права root | Требуются инструментам aircrack-ng |
| Python 3.11+ и Node.js 18+ | Инструментарий бэкенда и фронтенда |