tuxevil/OpenWardRivingT
GitHub: tuxevil/OpenWardRivingT
一款运行于 OpenWrt 路由器上的自主式主动 wardriving 套件,结合 GPS 定位和车载平板 Dashboard 实现移动场景下的无线握手包捕获与审计。
Stars: 2 | Forks: 0
# OpenWardRivingT
[](LICENSE)
[](VERSION)
[](.github/workflows/ci.yml)
[](https://openwrt.org/)
[](openwrt_files/)
[](test/)
**专为车载自主操作设计的 OpenWrt 主动式 Wardriving 套件。**
OpenWardRivingT 运行在普通的 OpenWrt 路由器上,用于捕获 WPA/WPA2/WPA3 的 PMKID 和
EAPOL 握手包,同时结合 GPS 对其进行地理定位。无头(headless)捕获 daemon 与
针对平板电脑优化的 Web dashboard 配对,并带有可选的配套 GPU 服务器用于
[hashcat](https://hashcat.net/) 算力卸载。
这是一款**主动式**审计软件:它会发送 deauth 和 probe 帧,必须仅
用于您拥有或获得明确书面授权进行测试的网络。在部署前,请参阅
[法律与道德](#legal--ethics)。
## 目录
- [工作原理](#how-it-works)
- [功能](#features)
- [硬件](#hardware)
- [软件要求](#software-requirements)
- [安装](#installation)
- [配置](#configuration)
- [用法](#usage)
- [GPU 算力卸载(可选)](#gpu-offload-optional)
- [API 与安全性](#api--security)
- [开发](#development)
- [已知特性](#known-quirks)
- [项目文档](#project-documentation)
- [法律与道德](#legal--ethics)
- [贡献](#contributing)
- [致谢](#acknowledgments)
- [许可证](#license)
## 工作原理
OpenWardRivingT 由五个轻量层构建,无需构建步骤:
```
┌─────────────────────────────────────────────────────────┐
│ Layer 5 — Init & install │
│ install.sh (apk/opkg auto-detect), uninstall.sh, │
│ /etc/init.d/wardriving (OpenWrt rc.common) │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ Layer 4 — Web dashboard (vanilla JS SPA) │
│ openwrt_files/www/wardriving/{index.html,app.css, │
│ app.js,app-utils.js,sw.js} │
└─────────────────────────────────────────────────────────┘
│ fetch (Bearer / ?token=)
┌─────────────────────────────────────────────────────────┐
│ Layer 3 — CGI API │
│ /www/cgi-bin/wardriving_api → /usr/lib/wardriving/ │
│ {common,db,remote}.sh + handlers/{status,captures, │
│ maps,replay,settings}.sh │
└─────────────────────────────────────────────────────────┘
│ /etc/wardriving_*
┌─────────────────────────────────────────────────────────┐
│ Layer 2 — GPS bridge (NMEA over socat PTY) │
│ Browser HTML5 Geolocation → JS NMEA → CGI gps_push → │
│ /tmp/vGPS_fifo → socat → /tmp/vGPS → hcxdumptool │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ Layer 1 — Capture daemon │
│ /usr/bin/wardriving_core.sh │
│ loop: monitor iface check → hcxdumptool -t 3 --tot=1 │
│ → hcxpcapngtool → SQLite + master.hc2200 │
│ Optional: GPU /extract (bundle) or /upload_hc2200 │
└─────────────────────────────────────────────────────────┘
```
- **无构建步骤。** 文件由 `install.sh` 直接部署并就地编辑。
- **纯 BusyBox ash。** 所有 shell 脚本均以 POSIX `sh` 和 BusyBox 扩展为目标;
不允许使用 bashism(参见[规范](#conventions))。
- **本地优先数据。** dashboard 从不直接读取 GPU —— 每个 map、history、
client 和 cracked 视图均读取路由器自身的 SQLite 数据库和 pot/hash 文件。
有关更深入的架构说明(捕获状态机、GPS pipeline、调度表),请参阅
[CONTEXT.md](CONTEXT.md) 和 [ARCHITECTURE.md](ARCHITECTURE.md)。重要的设计
决策记录在 [ADR](docs/adr/README.md) 中。
## 功能
**捕获**
- 通过 `hcxdumptool` 进行主动 PMKID + EAPOL 握手包捕获(滚动 1 分钟窗口)
- 通过 `hcxpcapngtool` 按网络提取,生成去重后的 `master.hc2200`
- SQLite (WAL) 记录每个观察到的 BSSID/client 及其 GPS 坐标
- 热力图、智能目标评分和“新网络”排名
- 双模式 pipeline:在路由器上提取,在 GPU 上破解
**Dashboard**(原生 JS,无框架)
- 针对车载信息娱乐系统优化的 4 列布局(支持 1280×720 至移动端尺寸)
- 实时频谱分析仪(2.4 GHz 信道树,显示每个信道的网络数量)
- 通过上传 `Z/X/Y.png` 切片实现的离线优先地图;提供可选的在线切片切换
- 浏览器 GPS 覆盖(HTML5 Geolocation → 合成 NMEA → `hcxdumptool`)
- Pwnagotchi 桥接:通过 REST API 从真实的 Pwnagotchi 读取统计数据,并将其 `.pcap` 文件提取到本地数据库
- 回放模式:将录制的 GPS 轨迹重新输入到 dashboard 地图中
- 夜间模式(深红色调)、屏幕常亮、全屏、Text-to-Speech 目标提醒
- 用于离线应用外壳的 Service worker;用于强制刷新的版本化缓存
**硬件反馈**
- 绑定路由器的 LED,使其在捕获窗口处于活动状态时闪烁
- 映射物理 WPS/WiFi 按钮以启动/停止捕获
**安全性**
- 基于Token的 API 身份验证,支持 `Authorization: Bearer`(首选)以及 `?token=…` 回退
- `action=status` 是唯一的公共 endpoint;其他所有操作都需要 token
- 在每个提供文件服务的 endpoint 上均设有防范路径遍历的防护
- 在 `gps_push` 中进行严格的 NMEA 正则表达式验证
- 每个 CGI 响应都包含安全响应头(`nosniff`, `DENY`, `no-referrer`, `no-store`)
- 每个长时间运行的脚本均使用 `set -e`;在 `SIGTERM`/`SIGINT` 时执行 `trap` 清理
## 硬件
### 要求
1. **OpenWrt 路由器**,至少配备一个 Atheros AR9xxx 或 Qualcomm IPQ40xx 无线网卡
(提供最佳的监听模式 + 注入支持)。MediaTek MT76xx 需要额外的 `kmod`
包才能工作。**不支持** Broadcom。
- 2.4 GHz 无线网卡用于监听模式(捕获)
- 5 GHz 无线网卡用作控制面板 AP(推荐;也支持仅使用 2.4 GHz 单网卡)
2. **USB 闪存盘(必需)**,格式化为 `ext4`,挂载在 `/mnt/wardriving/`。
这是一项刻意的安全措施:如果没有它,捕获循环将拒绝启动,
以防止连续写入 `.pcapng` 导致 NAND 闪存磨损,并确保当内部闪存空间填满时路由器仍可启动。
3. 车载 **12V → 5V/12V 降压模块**。
4. **具备 GPS 功能的设备**(手机、平板电脑或 Android 车机),用于 dashboard GPS
覆盖。也支持通过 `--nmea_dev` 连接提供 `gpsd` 数据的 USB GPS dongle。
### 已测试
| Device | Chipset | OpenWrt | Status |
| ----------------------- | ------------------------ | ------- | -------------- |
| Netgear WNDR3700v2 | AR7161 + AR9220/AR9223 | 23.05 | ✅ 完整 |
| GL.iNet GL-A1300 | IPQ4018 | 24.10 | ✅ 完整 |
| TP-Link Archer C7 v2 | QCA9558 + QCA9880 | 23.05 | ✅ 监听正常 |
| Generic x86_64 | Any | 24.10+ | ✅ 需要 USB GPS|
## 软件要求
`install.sh` 会自动检测 `apk`(OpenWrt 24.x+)或 `opkg`(OpenWrt 23.x 及更早版本)并
安装其余依赖:
- `hcxdumptool` ≥ 6.3, `hcxtools`(捕获 + 提取)
- `socat`(通过虚拟 PTY 传输 NMEA)
- `sqlite3-cli`(WAL 数据库)
- `block-mount`, `e2fsprogs`, `kmod-fs-ext4`, `kmod-usb-storage`(USB 自动挂载)
- `openssh-client`, `openssh-sftp-server`(无需 `scp -O` 的现代 `scp`/SFTP)
- `uhttpd`(OpenWrt 内置 Web 服务器)
OpenWrt 24.x 和 25.x 镜像可能仅自带 `apk`;`install.sh` 会同时处理两者。如果
在启用 WireGuard 时软件包更新失败,WAN/WG 子网是首要可疑对象
(参见[配置 → 网络拓扑](#network-topology))。
## 安装
```
# 在路由器上,以 root 身份:
wget -O- https://raw.githubusercontent.com/tuxevil/OpenWardRivingT/main/install.sh | sh
```
或者克隆并以交互方式运行:
```
git clone https://github.com/tuxevil/OpenWardRivingT.git
cd OpenWardRivingT
chmod +x install.sh uninstall.sh
./install.sh
```
`install.sh` 将会:
1. 安装所有必需的软件包(自动检测 `apk` 或 `opkg`)。
2. 配置 USB 自动挂载(`/etc/fstab` → `/mnt/wardriving`)。
3. 在 `/etc/wardriving_api_token` 生成一个 32 字符的 API token(权限模式 `0600`)。
4. 为 5 GHz 控制面板 AP
(`OpenWardRivingT`)生成一个 12 字符的随机 WiFi 密码,并将其保存到 `/etc/wardriving_wifi_pass`(权限模式 `0600`)。
5. 部署 CGI、dashboard、init 脚本和 shell 库。
6. 将 API token 注入到 dashboard 中,确保 UI 开箱即用。
7. 在开机时启用 `wardriving` 服务。
8. 将 `uhttpd.main.max_requests` 增加到至少 12,以便 dashboard 轮询能够与
LuCI 共存。
卸载命令:`sh uninstall.sh`(保留 USB 驱动器上的捕获数据完整无缺)。
## 配置
所有运行时配置都位于 `/etc/wardriving_*` 文件中。Dashboard 会直接读取它们;
您也可以使用 `uci` 或任何文本编辑器进行编辑。
| File | Purpose | Default |
| --------------------------------------------- | ------------------------------------------------------ | ------------ |
| `/etc/wardriving_api_token` | 用于受保护 API 操作的 Bearer token | (生成的) |
| `/etc/wardriving_wifi_pass` | 5 GHz 控制面板 WiFi 密码 | (生成的) |
| `/etc/wardriving_mode.txt` | 操作模式:`active`, `passive`, `smart` | `smart` |
| `/etc/wardriving_targets.txt` | 每行一个 MAC —— 当检测到时触发 TTS/视觉警报 | (空) |
| `/etc/wardriving_excluded.txt` | 永不捕获或警报的 SSID/MAC | (空) |
| `/etc/wardriving_removed.txt` | 从已捕获的历史记录中丢弃的 SSID/MAC | (空) |
| `/etc/wardriving_keep_pcap.txt` | `1` = 提取后保留 `.pcapng` | `0` |
| `/etc/wardriving_wigle_token` | WiGLE API token (Basic-auth) | (空) |
| `/etc/wardriving_extraction_mode` | `local` 或 `remote` | `local` |
| `/etc/wardriving_gpu_cracking_enabled` | `0` 或 `1` | `1` |
| `/etc/wardriving_remote_enabled` | `0` 或 `1` | `1` |
| `/etc/wardriving_remote_url` | GPU 服务器基础 URL | (空) |
| `/etc/wardriving_remote_secret` | GPU 服务器共享密钥 (X-OWRT-Token header) | (空) |
### 网络拓扑
当路由器通过 WireGuard 连接 GPU 时,如果您的
WireGuard 子网与 WAN 重叠,请**仅路由 GPU 主机**。请使用 `/32` 主机路由(例如 `/32`)配置 WireGuard,
而不是整个 WireGuard 子网;通过 WireGuard 通告整个
`/24` 可能会抢占 WAN 默认路由并导致 `apk update` 失败。
## 用法
1. 插入 USB 驱动器,在车内为路由器供电。
2. 使用 `/etc/wardriving_wifi_pass`(或安装控制台)中的密码,将您的手机/平板电脑连接到 **`OpenWardRivingT`** 5 GHz WiFi。
3. 打开 `http://192.168.1.1/wardriving/index.html`(或您路由器的 LAN IP)。
4. 在 dashboard 中切换 **Browser GPS Override**,开始将手机 GPS 的
NMEA 数据流传输到 `hcxdumptool`。
5. 在 dashboard 上点击 **START** —— 或者按下配置好的物理路由器按钮
(默认为 WPS/WiFi)。
### 离线地图
在 **Settings → Maps** 中,上传使用 Mobile Atlas Creator 等工具构建的 `.tar.gz` 文件
(`Z/X/Y.png` 文件夹结构)。Dashboard 将自动切换到离线切片;
取消勾选 **Online tiles** 复选框以回退到仅离线模式。
### 回
录制的捕获内容可以回放:**Settings → Replay → Upload CSV** 接受
包含 NMEA 语句的 CSV 文件,并将汽车标记沿着路线回放动画,同时
将发现的网络重新发射到地图上。这对于驾驶后回顾非常有用。
## GPU 算力卸载(可选)
配套的 GPU 服务器(`server_files/`)是一个小型的 Flask 应用,它可以:
- 接收 `.pcapng` 上传,并返回一个包含 `networks.jsonl`, `clients.jsonl`,
和 `capture.hc2200` 的压缩包(路由器将该压缩包导入其本地数据库 —— 从不直接查询
GPU)。
- 接收 `.hc2200` 上传,针对用户提供的字典运行 `hashcat`,并
通过 `action=upload_potfile` 将破解出的密码同步回路由器。
```
POST /extract (X-OWRT-Token)
Router ──────────────────────────────────────────► GPU server (gpu_server.py)
◄──────────────────────────── bundle.json + capture.hc2200
imports into SQLite + master.hc2200
POST /upload_hc2200 (X-OWRT-Token)
──────────────────────────────────────────►
hashcat run_hashcat.sh
POST action=upload_potfile&token=… ◄──── cracked.txt
◄──────────────────────────── 200 OK
```
### 部署 GPU 服务器
```
# 在 GPU 主机上(Linux + hashcat ≥ 6.2 + Python 3.9+)
sudo cp server_files/wardriving_gpu.service /etc/systemd/system/
sudo cp server_files/gpu_server.py /var/lib/openwardrivingt/
sudo cp server_files/run_hashcat.sh /var/lib/openwardrivingt/
sudo chmod +x /var/lib/openwardrivingt/run_hashcat.sh
# 生成 shared secret 并编辑 service unit
SECRET=$(tr -dc 'A-Za-z0-9' /etc/wardriving_remote_secret && chmod 600 /etc/wardriving_remote_secret'
sudo systemctl daemon-reload
sudo systemctl enable --now wardriving_gpu
```
为了进行端到端部署和冒烟测试,可选的 `scripts/deploy_test_env.sh` 和
`scripts/smoke_router_gpu.sh` 封装了上述步骤。它们需要设置 `GPU_HOST`、
`GPU_URL` 和 `ROUTER_HOST` 环境变量。
## API 与安全性
CGI 在 `/cgi-bin/wardriving_api` 暴露了一个单一的 `action=` 调度器。该
调度器从 `/usr/lib/wardriving/handlers/` 加载处理模块,并在 `common.sh` 中集中执行授权验证。
### 认证契约
| Endpoint | Auth | Notes |
| ---------------- | ------------ | ---------------------------------------------------- |
| `action=status` | ❌ 无 | 公共健康检查 —— 运行状态、网络计数 |
| 所有其他操作 | ✅ 是 | `Authorization: Bearer ` 请求头(首选)或 `?token=…` 查询参数(作为 `window.open()` 下载的备选方案) |
Token 从 `/etc/wardriving_api_token` 读取(权限模式 `0600`,由 `install.sh` 生成)。
Dashboard 的 `apiUrl()` 和 `withApiAuth()` 辅助函数会自动附加 Bearer 请求头
—— 切勿在前端构造原始的 `fetch('/cgi-bin/wardriving_api?…')` 调用,否则
请求将默默失败并返回 `401 Unauthorized`。
### Endpoint 列表
`status`, `start`, `stop`, `set_hw`, `set_mode`, `set_processing`, `set_pcap_retention`,
`networks_map`, `clients_map`, `map_data`, `heatmap_data`, `scored_networks`,
`cracked_networks`, `history`, `list_files`, `download_all`, `download_bbox`,
`download_status`, `export_gpx`, `export_kml`, `export_hashcat`, `delete_file`,
`add_target`, `remove_target`, `check_targets`, `get_targets`, `add_exclusion`,
`remove_exclusion`, `get_exclusions`, `save_wigle_token`, `wigle_upload`, `upload_tiles`,
`upload_potfile`, `gps_push`, `pwnagotchi_sync`, `pwnagotchi_status`, `replay_start`,
`replay_status`, `replay_seek`, `replay_pause`, `replay_stop`, `replay_report`,
`replay_discovered`.
### 安全强化
- 每个响应都包含 `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY`, `Referrer-Policy: no-referrer`,
`Cache-Control: no-store`
- 无 CORS(故意省略了 `Access-Control-Allow-Origin: *`)
- 状态更改操作需要使用 `POST` 请求;每个 endpoint 都限制了 `CONTENT_LENGTH`
- 拒绝路径遍历 payload(`../etc/passwd`, `%2Fetc%2Fpasswd`)
- 在 `add_exclusion`/`remove_exclusion` 中对 URL 解码后的 SSID 进行检查
- 传统的 `wardriving_remote_allow_sql` 模式默认**关闭**,如果出现该文件将发出 syslog 警告
## 开发
### 本地 hooks(推荐)
纯 POSIX `sh` 编写的 hooks 位于 [`.githooks/`](.githooks)。在每个克隆仓库中安装一次,以便 pre-commit lint 和 Conventional-Commits
commit-msg 验证器自动运行:
```
sh scripts/install_hooks.sh # install (idempotent)
sh scripts/install_hooks.sh --status # show current state
sh scripts/install_hooks.sh --uninstall
```
安装程序会将小型包装器脚本写入 git 活动的 hooks 目录
(默认为 `.git/hooks/`;支持 `core.hooksPath`,因此它可以与
`bd`/beads 链接)。它**不**会修改 `core.hooksPath`。如果需要绕过一次,请使用
`git commit --no-verify`。有关完整的规范,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md#local-pre-commit-and-commit-msg-hooks)。
### 运行测试套件
CI 针对项目树运行 `test/run_tests.sh`(约 159 个断言,涵盖
shell 语法、shellcheck 合规性、CGI 契约、安全防护、Service worker 行为等)。在本地:
```
sudo apt-get install -y shellcheck busybox-static sqlite3 nodejs
shellcheck -e SC1090,SC2002,SC2010,SC2012,SC2015,SC2016,SC2018,SC2035,SC2045,SC3013,SC3043,SC3048 -x \
install.sh uninstall.sh \
openwrt_files/usr/bin/*.sh \
openwrt_files/usr/lib/wardriving/common.sh \
openwrt_files/usr/lib/wardriving/db.sh \
openwrt_files/usr/lib/wardriving/remote.sh \
openwrt_files/usr/lib/wardriving/handlers/*.sh \
openwrt_files/etc/init.d/wardriving \
openwrt_files/www/cgi-bin/wardriving_api \
test/run_tests.sh
sh test/run_tests.sh
sh test/run_js_tests.sh
```
CI 也会在每次 push 和 pull request 时运行(参见 `.github/workflows/ci.yml`)。
基于路径的 PR 自动打标签器(`.github/labeler.yml`)和标签同步工作流
(`.github/workflows/labels.yml`)使 issue 跟踪器的词汇保持与 [`.github/labels.yml`](.github/labels.yml) 同步。
### 规范
- **使用 POSIX `ash`,而不是 bash。** OpenWrt 自带 BusyBox `ash`;bashism 会破坏构建(没有数组 `()`,没有 `[[`,没有 `&>`,没有 `source` → 改用 `.`,纯 POSIX 代码路径中没有 `local` 关键字)。
- **不使用 `mountpoint`,也不使用 `findmnt`。** OpenWrt 的 BusyBox 不包含它们 —— 请使用 `/proc/mounts` 检查挂载点。
- **在长时间运行的循环中使用 `set -e`。** `wardriving_core.sh`, `wardriving_clients.sh`,
`run_hashcat.sh` 设置了 `-e`;`wardriving_replay.sh` 选择使用 `set -u`,因为瞬时错误不应中止回放。
- **使用 `mktemp` 进行原子写入。** 切勿直接写入实时的系统路径。
- **捕获信号。** 每个具有无限循环的脚本都必须 `trap cleanup SIGTERM SIGINT SIGHUP` 并将其 PID 写入 `/var/run/`。
- **测试环境变量覆盖。** 写入 `/etc/wardriving_*` 路径的处理程序必须遵守 `${WARDRIVING_X_FILE:-/etc/...}`,以便 CI 套件(非 root 用户)能够运行。完整的列表位于 `openwrt_files/usr/lib/wardriving/common.sh`。
- **仓库中禁止存放大型二进制文件。** 第三方库作为静态链接文件保留;不保留构建产物。
有关 AI agent 工作流(提交规范、会话关闭协议、端到端
架构),请参阅 [AGENTS.md](AGENTS.md) 和 [CLAUDE.md](CLAUDE.md)。
## 项目文档
仓库面向人类的文档分为几个文件,以便每种
受众只需阅读自己需要的内容。
| File | Audience | Purpose |
| ---- | -------- | ------- |
| [README.md](README.md) | 运维人员、集成商 | 功能、硬件、安装、配置、API 列表 |
| [ARCHITECTURE.md](ARCHITECTURE.md) | 维护者、贡献者 | 五层模型、调度器、数据流、规范 |
| [CONTEXT.md](CONTEXT.md) | AI agent、维护者 | GPS pipeline、特性、安全模式、环境变量列表 |
| [AGENTS.md](AGENTS.md) | AI agent | Beads 工作流、会话关闭协议、环境变量列表 |
| [CLAUDE.md](CLAUDE.md) | AI agent | 端到端架构、规范、测试命令 |
| [CHANGELOG.md](CHANGELOG.md) | 运维人员、集成商 | 发布说明(滚动 `Unreleased` 部分) |
| [CONTRIBUTING.md](CONTRIBUTING.md) | 贡献者 | 工作流、规范、测试、提交消息、hooks |
| [SECURITY.md](SECURITY.md) | 运维人员、安全研究员 | 漏洞披露、支持的版本、安全强化 |
| [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) | 贡献者 | 行为准则、执行 |
| [VERSION](VERSION) | 工具链 | 当前树的固定 SemVer |
| [docs/adr/](docs/adr/README.md) | 维护者 | 架构决策记录 (ADR) |
| [.githooks/](.githooks/) | 开发者 | Pre-commit + commit-msg hooks(通过 `scripts/install_hooks.sh` 安装) |
## 已知特性
1. **轮转期间 CPU 峰值。** 捕获窗口每分钟轮转一次;在 `hcxdumptool` 退出、`hcxpcapngtool` 提取以及 SQLite 接收的短暂时间内,CPU 可能会达到 100%。我们以 `nice -n 10` 运行这些任务以保持 UI 响应,但预计会有轻微的 API 延迟。
2. **GPS 缓冲延迟。** 浏览器将 NMEA 批处理并每 4 秒发布一次,以避免 fork uhttpd。在高速公路速度下,预计会有约 40–50 米的空间延迟 —— 完全在标准 WiFi 范围内。
3. **握手包计数缓存。** `/status` 报告的握手包数量来自每次合并 `master.hc2200` 时刷新的缓存计数器,而不是实时的 `wc -l`。缓存值可能比文件落后一个轮转周期。
4. **APK 与 opkg。** OpenWrt 24.x/25.x 镜像可能仅包含 `apk`。`install.sh` 会自动检测;如果您的路由器仍然使用 `opkg`,您可以固定使用 23.x 构建。
5. **现代 `scp`。** OpenWrt 的 dropbear 不包含 SFTP 子系统;请安装 `openssh-sftp-server` 以便使用现代 OpenSSH 客户端将文件复制到路由器(无需使用 `scp -O`)。
## 法律与道德
**OpenWardRivingT 是一款主动式审计工具。** 它会发送 deauth 和
probe 帧,并将短暂中断目标无线网络的连接。
它仅适用于:
- 教育用途
- 对您拥有的网络进行授权的安全测试
- 具有明确书面同意的渗透测试工作
您必须遵守您所在司法管辖区有关无线
通信、数据拦截和滥用计算机行为法规的所有地方、州和联邦法律。
本仓库的维护者和贡献者对任何滥用行为不承担任何责任。
如果您不确定您的用例是否已获得授权:**请停止使用,并首先以书面形式询问网络所有者。**
## 贡献
欢迎在 GitHub 上提交 issue 和 pull request。完整的贡献者指南位于
[CONTRIBUTING.md](CONTRIBUTING.md);简短版本如下:
1. 搜索现有的 issue 以避免重复。
2. 对于非平凡的更改,请先打开一个 issue 讨论方法。
3. Fork 仓库并基于 `main` 创建一个功能分支。
4. 在本地运行完整的测试套件 —— `sh test/run_tests.sh`,
`sh test/run_js_tests.sh` 以及 [开发](#development) 中的 shellcheck 命令必须全部通过。
5. 遵循 [CONTRIBUTING.md](CONTRIBUTING.md),
[AGENTS.md](AGENTS.md) 和 [CLAUDE.md](CLAUDE.md) 中的项目规范(BusyBox ash,无 bashism,使用 mktemp 进行原子写入,为任何新的 `/etc` 处理程序提供 `WARDRIVING_*_FILE` 环境变量覆盖)。
6. 保持提交专注;撰写清晰的 conventional-commit 消息
(`fix:`, `feat:`, `docs:`, `security:`, `chore:`)。
7. 针对用户可见的更改,在 `## Unreleased` 下更新 [CHANGELOG.md](CHANGELOG.md)。
8. 使用 PR 模板(`.github/PULL_REQUEST_TEMPLATE.md`)。
**安全问题**
请**不要**为疑似漏洞提交公开的 issue。请按照
[SECURITY.md](SECURITY.md) 中的披露流程操作 —— 私人邮件或
GitHub 私密安全公告。我们将在 72 小时内确认报告。
**行为准则**
期望所有参与者都能遵守
[行为准则](CODE_OF_CONDUCT.md)。维护者保留关闭无建设性讨论的权利。
## 致谢
- [Jens Steube](https://github.com/JeremyDeNotariis) 以及 `cxtools` / `hcxdumptool`
的作者 —— 没有他们的工作,这个项目就不可能存在
- [evilsocket](https://github.com/evilsocket) 和 [pwnagotchi](https://pwnagotchi.ai/)
带来的灵感(dashboard 的虚拟宠物是对此的一点敬意)
- [Leaflet](https://leafletjs.com/) 和 [OpenStreetMap](https://www.openstreetmap.org/)
项目
- OpenWrt 项目及其维护者
- [WiGLE](https://wigle.net/) 提供的公开 wardriving 数据集和上传 API
- 每一个提交 issue、在真实硬件上进行测试或贡献补丁的人
## 许可证
Copyright © 2026 OpenWardRivingT 贡献者。
OpenWardRivingT 根据基于 **GNU General Public License v3.0** (GPL-3.0) 授权。
有关全文,请参见 [LICENSE](LICENSE)。
如果您重新分发修改后的版本,您必须在相同的许可证下发布源代码。
标签:OpenWrt, Wardriving, WiFi破解, 网络安全, 网络审计, 隐私保护