tuxevil/OpenWardRivingT

GitHub: tuxevil/OpenWardRivingT

一款运行于 OpenWrt 路由器上的自主式主动 wardriving 套件,结合 GPS 定位和车载平板 Dashboard 实现移动场景下的无线握手包捕获与审计。

Stars: 2 | Forks: 0

# OpenWardRivingT [![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](LICENSE) [![Release](https://img.shields.io/badge/release-v0.1.0-blue.svg)](VERSION) [![CI](https://img.shields.io/badge/CI-passing-brightgreen.svg)](.github/workflows/ci.yml) [![OpenWrt](https://img.shields.io/badge/OpenWrt-23.05%20%7C%2024.x%20%7C%2025.x-orange.svg)](https://openwrt.org/) [![Shell](https://img.shields.io/badge/shell-BusyBox%20ash-blue.svg)](openwrt_files/) [![Tests](https://img.shields.io/badge/tests-159%20passing-brightgreen.svg)](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破解, 网络安全, 网络审计, 隐私保护