ELHart05/AirmonGUI

GitHub: ELHart05/AirmonGUI

为 aircrack-ng 无线审计套件提供本地 Web 图形界面,将监听模式、网络扫描、握手包捕获和密码破解整合为引导式可视化流程。

Stars: 75 | Forks: 4

# AirmonGUI aircrack-ng 无线工具包的本地 Web 界面。 [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](LICENSE) [![Platform: Linux](https://img.shields.io/badge/Platform-Linux-333.svg?style=flat-square&logo=linux&logoColor=white)](#requirements) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/ELHart05/AirmonGUI/actions/workflows/ci.yml) [![Last commit](https://img.shields.io/github/last-commit/ELHart05/AirmonGUI?style=flat-square)](https://github.com/ELHart05/AirmonGUI/commits) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](CONTRIBUTING.md) [![GitHub stars](https://img.shields.io/github/stars/ELHart05/AirmonGUI?style=social)](https://github.com/ELHart05/AirmonGUI/stargazers) [屏幕截图](#how-it-works) · [快速开始](#quick-start) · [功能](#features) · [路线图](#roadmap) · [贡献](#contributing) AirmonGUI dashboard

## 项目简介 AirmonGUI 将 `airmon-ng`、`airodump-ng`、`aireplay-ng` 和 `aircrack-ng` 集成在一个运行于本地机器的 Web 应用中。你可以通过点击带标签的表单来启用监听模式、扫描网络、捕获 WPA 握手包并破解它,而无需记住各种命令参数。 它并没有重新实现任何工具。后端直接调用真实的二进制程序并解析其输出,因此你所看到的就是该套件实际执行的操作。UI 绑定到 `127.0.0.1`,且 API 绝不会将数据传输到你的机器之外。 ## 开发动机 aircrack-ng 套件非常出色,但其工作流程分散在四个独立的命令和许多你需要牢记的参数中:将网卡设为监听模式、跳频寻找目标、锁定 BSSID、在正确的信道上发送 deauth、等待四次握手,然后将捕获的数据导入字典。选错信道,deauth 就会失效。忘记加 `--bssid`,捕获的数据就会充满杂音。 我希望将这整个流程变成一系列引导式的界面,向你展示空气中的信号,并理清各个步骤之间的状态。这就是本项目的初衷。它非常适合用于学习攻击的实际行为、进行实验室研究以及加速已授权的评估工作。 ## 功能 | 领域 | 功能描述 | |---|---| | 监听模式 | 使用 `airmon-ng` 在选定的接口上启用或禁用监听模式。当 NetworkManager 等后台服务阻止监听模式时,提供了一个独立的 check-kill 操作来运行 `airmon-ng check kill`。 | | 网络扫描 | 运行 `airodump-ng` 捕获任务,并在实时表格中显示接入点和客户端,支持按名称、安全性或频段进行过滤。 | | 信号分析 | 根据接入点的可利用程度(信号强度、弱安全性、活跃客户端)对其进行排名,并绘制范围内的信道拥塞和安全类型分布图。 | | 取消认证 | 通过 `aireplay-ng` 发送定向或广播 deauth,首先将接口设置到接入点的信道上,以确保帧能准确送达。 | | 握手包捕获 | 包含三个步骤的工作流程:将 `airodump-ng` 锁定到目标,运行自动 deauth 引擎,并自动检测 WPA 四次握手。 | | 破解 | 将捕获文件和字典提供给 `aircrack-ng`,实时流式传输日志,并在密码出现的那一刻显示恢复的密钥。 | | 捕获文件管理 | 浏览、过滤、批量选择和删除套件生成的 `.cap`、`.csv`、`.pcap`、`.ivs` 和 `.log` 文件。 | | 集成终端 | 一个真实的 PTY shell (xterm.js),方便你在同一窗口中使用原始命令行。 | | 命令日志 | 记录会话中运行的每一条命令,包含 stdout、stderr、状态以及一键复制功能。 | ## 工作原理 一次操作流程会在侧边栏中自上而下进行。以下是各个界面的说明。 ### 1. 将适配器设为监听模式 选择一个接口,检查其驱动程序、芯片组和 PHY,然后开启监听模式。操作完成后,只需释放该接口即可。
Monitor mode control
### 2. 扫描空间信号 启动 `airodump-ng` 任务,观察随着搜索不断填充的接入点和客户端。过滤表格,然后将任何网络直接发送到 deauth 或握手工作流程。
Live network scan
### 3. 选择目标 信号分析会对每个接入点进行评分,使得那些信号强、安全性弱且有活跃客户端的接入点排在前面。它还会显示每个信道的繁忙程度以及周围网络使用的安全协议。你自己的设备会被特别标记,以防你误将操作目标对准自己。
Signal analysis and target ranking
### 4. 捕获握手包 此界面会将 `airodump-ng` 锁定到目标的 BSSID 和信道,运行自动 deauth 引擎将客户端踢下线以促使它们重新连接,并在捕获到四次握手包的瞬间变为绿色。
WPA handshake capture
### 5. 破解密码 将 `aircrack-ng` 指向捕获文件和字典。程序运行时会流式传输日志,如果列表中包含密码,它会立即显示在顶部。
WPA and WEP cracking with key found
更多界面:deauth、捕获文件、日志
带有信道锁定、运行历史记录和已解析事件输出的独立 deauth 界面:
Deauth attack view
捕获文件管理:
Capture file management
会话命令历史记录:
Command logs
## 快速开始 你需要 Linux 环境、root 权限、一个支持监听模式的无线适配器,以及位于 `$PATH` 中的 aircrack-ng 套件。完整列表请参阅[环境要求](#requirements)。 ``` # 0. 安装套件 (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 (终端 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 (终端 2) cd frontend npm install npm run dev ``` 打开 http://localhost:5173。UI 仅与 `127.0.0.1:8000` 通信。 首次连接时,UI 会要求输入 API token。后端在启动时会向控制台打印一个 token,如下所示: ``` ====================================================================== AirmonGUI API token (generated for this run): Xy3k...long-random-string... Paste it into the AirmonGUI web UI when prompted. ====================================================================== ``` 将该 token 粘贴到解锁界面中。如果要在重启后保持固定的 token,请在 `backend/.env` 中设置 `AIRMON_GUI_AUTH_TOKEN`(后端会在启动时加载该文件)。除了健康检查外,每个 API 路由都需要此 token,这可以防止多余的本地进程或你碰巧访问的网页在后台偷偷驱动无线工具。在将后端绑定到除 `127.0.0.1` 之外的任何地址之前,你必须显式设置此 token,否则它将拒绝启动。 如果在单用户机器上提示输入 token 显得有些繁琐,可以设置 `AIRMON_GUI_AUTH_ENABLED=false` 以完全关闭身份验证;此时 UI 将跳过解锁界面。在关闭身份验证的情况下,后端会拒绝绑定到回环地址以外的任何地方——如果将 `API_HOST` 指向除 `127.0.0.1` 以外的地址,它将无法启动。 需要 root 权限是因为 `airmon-ng`、`airodump-ng` 和 `aireplay-ng` 需要使用原始套接字(raw sockets)。请直接调用 `.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 token 控制;可通过 `AIRMON_GUI_TERMINAL_ENABLED=0` 关闭)。在开发环境中,Vite 开发服务器(`:5173`)会将两者代理到后端。
API 参考
后端运行时,可以在 `http://127.0.0.1:8000/docs` (Swagger UI)、`/redoc` 和 `/openapi.json` 查看交互式 schema。 在启用身份验证的情况下(默认),除了 `/api/health` 和 `/api/auth/status` 之外的每个端点都需要 `X-Auth-Token` 标头(关于 token 的来源,请参阅[快速开始](#quick-start))。在 Swagger UI 中,**Authorize** 按钮会自动为你发送 token。设置 `AIRMON_GUI_AUTH_ENABLED=false` 后,将不再需要 token(仅限回环地址)。 | 方法 | 端点 | 描述 | |---|---|---| | GET | `/api/health` | 服务器健康检查(无需 token) | | GET | `/api/auth/status` | 查看身份验证和终端是否已启用(无需 token) | | GET | `/api/auth/verify` | 确认提供的 token 是否有效 | | 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` | 启动 deauth 任务 | | GET | `/api/aireplay/deauth/jobs` | 列出 deauth 任务 | | GET | `/api/aireplay/deauth/{job_id}/status` | 轮询 deauth 任务状态 | | POST | `/api/aireplay/deauth/{job_id}/stop` | 停止 deauth 任务 | | 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=` | 检查捕获文件是否包含握手包 | | 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 终端(默认开启;受 token 控制;使用 `AIRMON_GUI_TERMINAL_ENABLED=0` 禁用) |
配置
后端使用以下默认值运行,你只需根据需要更改它们。在 `backend/.env` 中设置(启动时加载)或在启动 Uvicorn 之前导出它们;导出的变量会覆盖文件中的配置。完整列表请参阅 `backend/.env.example`。 | 变量 | 默认值 | 描述 | |---|---|---| | `AIRMON_GUI_CAPTURE_DIR` | `/var/lib/airmongui/captures` | 捕获文件的写入位置(创建权限为 0700;必须是一个私有的、专属目录) | | `AIRMON_GUI_AUTH_ENABLED` | `true` | 设置为 `false`取消 token 要求(仅限回环地址) | | `AIRMON_GUI_AUTH_TOKEN` | _(自动生成)_ | API token。如果未设置,则会在启动时生成并打印;如果绑定到非回环地址则必须设置 | | `AIRMON_GUI_TERMINAL_ENABLED` | `1` | 受 token 控制的 `/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` | 要加载的 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 套件 | `$PATH` 中的 `airmon-ng`、`airodump-ng`、`aireplay-ng`、`aircrack-ng` | | `wireless-tools` (`iwconfig`) | 用于信道调优 | | Root 权限 | aircrack-ng 工具必需 | | Python 3.11+ 和 Node.js 18+ | 后端和前端工具链 | ## 故障排除 **“无法将 wlan0 锁定到信道 N”或扫描不到任何网络。** 这几乎总是因为接口仍处于受管模式。监听模式是让适配器捕获信号和切换信道的必要条件。请先从 Monitor 标签页启用它(或使用 `airmon-ng start wlan0`),然后在监听接口上扫描——通常是 `wlan0mon`,不过某些驱动程序会保留原名称。扫描操作会拒绝受管模式的接口并给出这个确切的提示,而且如果无法验证预锁定状态,单信道扫描将不再中止,因为 `airodump-ng` 会自行调整信道。 **第一次运行能显示网络,但第二次不行。** 残留的监听接口,或者 NetworkManager 在两次运行之间重新接管了适配器,都可能使其陷入卡死状态。在扫描之前运行 `airmon-ng check kill`(Check Kill 按钮),并在同一接口上开始新的扫描之前先停止之前的扫描。 ## 路线图 欢迎在这些任务上提供帮助。请参阅[贡献指南](#contributing)。 - 用于后端和前端的一键启动器(Makefile target 或 Docker Compose) - 用于 GPU 破解的 `hashcat` 交接功能 - PMKID 捕获和攻击 - 随时间变化的客户端和 AP 图表 - 完成并可导出的报告视图 - 打包发布版本和安装脚本 有想法吗?[提出一个 issue](https://github.com/ELHart05/AirmonGUI/issues/new)。欢迎功能请求和提问。 ## 贡献 欢迎提交 Pull request,越是小巧、专注的改动越好。 1. 阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 了解设置、验证和安全规则。 2. Fork 仓库并创建分支,确保更改仅限于一件事。 3. 检查后端(`uvicorn`)和前端(`npm run dev`)是否都能干净地启动。 4. 提交一个 PR,说明更改了什么以及为什么。 每个文件夹都有自己的 README 和说明:[后端](backend/README.md)、[前端](frontend/README.md)、[网站](website/README.md)。 ## 法律与合规使用 AirmonGUI 仅用于授权的无线测试、研究以及在您拥有或获得书面许可进行评估的网络上进行教学。 在大多数司法管辖区,拦截流量以及对不受你控制的网络或设备进行 deauth 是非法的。出于安全考虑,默认将 API 和开发服务器都限制在回环地址上,请勿在共享或公共网络上暴露它们。作者对滥用行为不承担任何责任。使用本软件即表示你确认对所接触的每个网络和设备都拥有权限。 使用它来理解和保护网络,而不是攻击不属于你的网络。 ## 许可证 MIT,详见 [LICENSE](LICENSE)。本项目基于 [aircrack-ng](https://www.aircrack-ng.org/) 项目构建,实际工作均由其完成。
标签:Web界面, WiFi审计, 图形化工具, 自动化攻击, 防御绕过