[!WARNING] 仅在你拥有或已获得书面测试许可的网络上使用此工具。在大多数地区,扫描、解除认证或捕获你不控制的网络的流量是违法的。请参阅法律与负责任使用。
AirmonGUI 将 airmon-ng、airodump-ng、aireplay-ng 和 aircrack-ng 整合到一个运行在你本机上的 Web 应用中。你可以通过点击带标签的表单来启用监听模式、扫描网络、捕获 WPA 握手并破解它,而无需记忆各种参数。
它没有重新实现任何工具。后端会调用真实的二进制程序并解析其输出,因此你看到的就是工具套件实际执行的结果。UI 绑定到 127.0.0.1,API 永远不会访问你机器之外的地方。
aircrack-ng 套件非常优秀,但整个工作流程分散在四个独立的命令和大量需要记忆的参数中:将网卡置于监听模式、跳频寻找目标、锁定 BSSID、在正确的信道上发起解除认证攻击、等待四次握手,然后将捕获文件交给字典进行破解。信道没对准,解除认证攻击就毫无效果。忘记 --bssid,你的捕获文件就会充满噪声。
我希望将整个流程做成一组界面,引导你逐步操作,显示空中的网络情况,并在各步骤之间保持状态的连贯。这就是这个项目的目的。它非常适合学习攻击的实际行为、实验室工作以及加速授权测试。
一次运行按照侧边栏从上到下的顺序进行。以下是每个界面的说明。
下方截图中的网络、BSSID 和客户端均为合成的演示数据,并非真实捕获。
选择接口,检查其驱动、芯片组和 PHY,然后开启监听模式。完成后仅释放该接口。

启动 airodump-ng 任务,实时查看接入点和客户端被发现并填充。过滤表格,然后将任意网络直接发送到解除认证或握手工作流程。

信号分析为每个接入点评分,使信号强、安全设置弱且有活跃客户端的接入点排在前面。它还会显示每个信道的繁忙程度以及周围网络使用的安全类型。你自己的设备会被标记出来,避免误将攻击目标指向自己。

此界面将 airodump-ng 锁定到目标的 BSSID 和信道,运行自动解除认证引擎将客户端踢下线以便它们重新连接,并在捕获到四次握手的瞬间变绿。

将 aircrack-ng 指向捕获文件和字典。运行时日志实时滚动,如果密码短语在你的字典中,它会显示在顶部。

支持信道锁定的独立解除认证,包含运行历史和解析后的事件输出:

捕获文件管理:

会话命令历史:

你需要 Linux 系统、root 权限、支持监听模式的无线适配器,以及位于 $PATH 中的 aircrack-ng 套件。完整列表请参阅系统要求。
# 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。UI 只与 127.0.0.1:8000 通信。
首次连接时,UI 会要求输入 API 令牌。后端在启动时会向控制台打印一个令牌,如下所示:
======================================================================
AirmonGUI API token (generated for this run):
Xy3k...long-random-string...
Paste it into the AirmonGUI web UI when prompted.
======================================================================
将该令牌粘贴到解锁界面。要在重启后保持令牌固定,请在 backend/.env 中设置 AIRMON_GUI_AUTH_TOKEN(后端在启动时加载该文件)。除健康检查外的所有 API 路由都需要此令牌,这样可以防止本地的其他进程或你正在访问的网页在后台悄悄驱动无线工具。在将后端绑定到除 127.0.0.1 之外的任何地址之前,你必须显式设置令牌——否则后端将拒绝启动。
如果在单用户机器上这个提示只是麻烦,可以设置 AIRMON_GUI_AUTH_ENABLED=false 完全关闭认证;UI 随后会跳过解锁界面。关闭认证后,后端拒绝绑定到除回环地址以外的任何位置——如果将 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/* 和 /ws/* WebSocket 代理到 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)
后端在 http://127.0.0.1:8000/api 提供 REST API,并在 /ws/terminal 提供终端 WebSocket(受 API 令牌保护;可通过 AIRMON_GUI_TERMINAL_ENABLED=0 关闭)。在开发环境中,:5173 端口上的 Vite 开发服务器会将两者代理到后端。
后端运行时,交互式模式位于 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 后不再需要令牌(仅限回环地址)。
后端使用以下默认值运行,因此你只需在需要更改时才设置这些变量。可以在 backend/.env 中设置(启动时加载),也可以在启动 Uvicorn 前导出;导出的变量会覆盖文件中的值。完整列表请参阅 backend/.env.example。
“无法将 wlan0 锁定到信道 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。
如果这个项目对你有用,点个 star 可以帮助其他人发现它,也让我知道值得继续维护。
AirmonGUI 仅用于对你拥有或已获得书面评估许可的网络进行授权的无线测试、研究和教学。
在大多数司法管辖区,拦截流量以及对你无法控制的网络或设备发起解除认证攻击是违法的。默认配置将 API 和开发服务器都绑定在回环地址上是有原因的,因此不要将其暴露在共享或公共网络上。作者对滥用行为不承担任何责任。使用本软件即表示你确认已获得所涉及的每个网络和设备的许可。
请用它来理解和防御网络,而不是攻击不属于你的网络。
MIT 许可证,请参阅 LICENSE。基于 aircrack-ng 项目构建,实际的破解工作由该项目完成。
| 功能模块 | 说明 |
|---|
| 监听模式 | 使用 airmon-ng 在所选接口上启用或禁用监听模式。当 NetworkManager 等后台服务阻止监听模式时,一个独立的 check-kill 操作会运行 airmon-ng check kill。 |
| 网络扫描 | 运行 airodump-ng 捕获任务,并在实时表格中显示接入点和客户端,可按名称、安全类型或频段过滤。 |
| 信号分析 | 根据可攻击性对接入点进行排名(信号强度、弱安全设置、活跃客户端),并绘制信道拥塞情况和范围内安全类型分布图表。 |
| 解除认证攻击 | 通过 aireplay-ng 发送定向或广播解除认证帧,先将接口设置到接入点的信道上,确保帧能到达。 |
| 握手捕获 | 三步工作流程:将 airodump-ng 锁定到目标,运行自动解除认证引擎,并自动检测 WPA 四次握手。 |
| 破解 | 将捕获文件和字典交给 aircrack-ng,实时输出日志,密钥一出现就立即显示。 |
| 捕获文件管理 | 浏览、过滤、批量选择和删除套件生成的 .cap、.csv、.pcap、.ivs 和 .log 文件。 |
| 集成终端 | 真正的 PTY shell(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 可取消令牌要求(仅限回环地址) |
AIRMON_GUI_AUTH_TOKEN | (自动生成) | API 令牌。未设置时在启动时生成并打印;绑定到非回环地址时必须设置 |
AIRMON_GUI_TERMINAL_ENABLED | 1 | 受令牌保护的 /ws/terminal shell;设置为 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 | 要加载的环境文件路径;空字符串表示跳过加载 |
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+ | 后端和前端工具链 |