tpsaradhi/wifi_device_control

GitHub: tpsaradhi/wifi_device_control

一款用于精准控制家庭路由器上单台设备上网权限的工具,包含原生 Android 应用和 Python Web 应用,支持 MAC 级别的封锁与解封。

Stars: 0 | Forks: 0

# wifi-device-control 一个精简的、适合手机使用的 Web 应用程序,用于**停止/启动特定设备的 WiFi 网络访问权限** 在你的家庭网络中——它就像是你路由器 MAC 过滤器的一个轻量级遥控器。 最初是为 **Airtel Nokia G-2425G-A** GPON 路由器构建的,但路由器特定的逻辑是一个 单一的可插拔 driver,因此无需改动其余部分即可添加对其他路由器的支持。 - 📱 移动优先的 Web UI —— 点击设备即可将其封锁,再次点击即可解封 - 🏷️ 为设备提供友好的名称(路由器仅显示 MAC) - 🔌 纯 Python —— 通过普通的 `pip install` 安装,**无需 C/Rust 编译器**(可通过 Termux 运行在手机、Raspberry Pi、NAS 或你的 PC 上) - 🧱 封锁机制位于**路由器**上,因此即使此应用未运行,它仍会保持强制执行状态 ## 📱 原生 Android 应用 —— “WiFi Warden” 还有一个独立的**原生 Android 应用**(Kotlin/Jetpack Compose),它**直接**与 路由器通信 —— 无需服务器,无需 Termux,安装一个 APK 即可。它能在 **不断开所有人 Wi-Fi 的情况下**封锁设备的互联网(通过路由器的 IP 过滤器,支持 IPv4 + IPv6),跨 IP 更改通过 MAC 跟踪设备,显示每台设备的 **制造商**,并支持友好名称和可选的 PIN。 - **下载:** 从[发布页面](../../releases)获取最新的 APK 并进行侧载 (允许“从未知来源安装”)。 - **要求:** 一台 **Airtel Nokia G-2425G-A** 路由器以及一部连接到同一家庭 Wi-Fi 的手机。(内置的 *mock* 模式可让你在没有路由器的情况下探索 UI。) - 源码及构建详情:[`android/`](android/)。目前它还是 debug/test 构建 —— 非常欢迎提供反馈。 ## 工作原理 ``` phone browser ──HTTP──> this app ──encrypted HTTP──> router admin (192.168.1.1) │ │ SQLite (friendly names) Wi-Fi MAC filter (enforces block) ``` 路由器自身会全天候强制执行封锁。此应用只需在你**拨动开关的那一刻**可被访问 —— 因此它可以运行在你的手机等小型设备上。 ### Nokia G-2425G-A driver 路由器的 Web 管理界面会加密每一个请求(AES-128-CBC payload + RSA-1024 key),并将 session 绑定到你的客户端 IP。该 driver 复现了该机制,并在 *Deny* 模式下驱动 **Security → MAC Filter → Wi-Fi SSID** 过滤器(经验证确实能将设备取消关联)。它会在所有 Deny 模式的 SSID 上执行封锁,涵盖 2.4GHz + 5GHz。 ## 设置 ### 1. 获取代码并安装 ``` git clone wifi_device_control cd wifi_device_control pip install -e . ``` ### 2. 配置 ``` cp config.example.toml config.toml ``` 使用你的路由器地址和登录信息编辑 `config.toml`(此文件已被 gitignore): ``` [router] driver = "nokia_g2425ga" host = "192.168.1.1" username = "admin" password = "YOUR_ROUTER_PASSWORD" [app] host = "0.0.0.0" port = 8000 database = "data/devices.db" ``` ### 3. 运行 ``` python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` 从同一 WiFi 下的任何设备打开 `http://:8000`。 ## 在你的手机上运行(Termux) —— 无需 PC 如果你没有一直开着的电脑,这是推荐的设置方案。你的手机将成为 host; 只要你在家里,就可以随时在手机自带的浏览器中打开该应用。 1. 从 [F-Droid](https://f-droid.org/packages/com.termux/) 安装 **Termux**(Play Store 的 构建版本已过时)。 2. 将项目文件夹传输到手机上(例如传输 `*_dist.zip`),然后在 Termux 中: pkg install -y unzip termux-setup-storage # 点击“允许” cd ~ && unzip ~/storage/downloads/wifi_device_control_dist.zip cd wifi_device_control bash scripts/setup-termux.sh # 安装依赖 + 询问路由器 IP/用户名/密码 + PIN 3. 选择运行方式: - **按需运行(省电,推荐个人使用):** 从 F-Droid 安装 **Termux:Widget** 应用,将其 widget 添加到你的主屏幕,然后点击 **“WiFi Control”**。它会在点击时启动服务器,打开应用,并 **在闲置时自动停止**(配置中的 `idle_shutdown`) —— 无需 wake-lock,耗电量几乎为零。 - **常驻运行(方便家人随时访问):** `bash scripts/run-termux.sh`(会持有 wake-lock,以便在手机休眠时仍可访问 —— 耗电量更大)。 4. 打开 **`http://127.0.0.1:8000`** → 输入你的 PIN → 点击进行封锁/解封。WiFi 上的其他手机 使用它打印出的 `http://192.168.x.x:8000` 地址访问(仅在其运行时有效)。 **开机自动启动(可选):** 安装 *Termux:Boot* 应用,然后创建 `~/.termux/boot/start-wdc.sh`: ``` #!/data/data/com.termux/files/usr/bin/sh termux-wake-lock cd ~/wifi_device_control && python -m uvicorn app.main:app --host 127.0.0.1 --port 8000 ``` 赋予其可执行权限:`chmod +x ~/.termux/boot/start-wdc.sh`。 **注意事项:** - 只有当手机连接到你的**家庭 WiFi** 时才有效(该路由器仅限 LAN 访问)。脱离该 网络时,应用会显示“无法连接到路由器”的横幅 —— 这是正常的。 - 不要封锁**作为 host 的手机自身**的 MAC,否则它会失去与路由器通信所需的 WiFi 连接。 - 切换操作大约需要 ~10–40 秒 —— 路由器会在每次更改时重新应用其 WLAN 配置。 ## 为其他路由器添加支持 在一个新模块中实现 `RouterDriver` 的五个方法(`app/drivers/base.py`),然后 在 `app/drivers/__init__.py` 中注册它: ``` class RouterDriver(ABC): def login(self) -> None: ... def list_devices(self) -> list[Device]: ... def list_blocked(self) -> list[str]: ... # source of truth for block state def block(self, mac: str) -> None: ... # idempotent, all bands def unblock(self, mac: str) -> None: ... # idempotent ``` 其他所有内容(store、service、UI)都仅依赖于这个接口。请参阅 `mock.py` 了解最简单的示例,以及 `nokia_g2425ga.py` 了解一个真实的、逆向工程的实现。 ## 开发 ``` pip install -e ".[dev]" pytest # offline tests (crypto, parsers, UI against the mock driver) python scripts/smoke_driver.py # read-only live test against the configured router ``` ## 许可证 MIT —— 详见 [LICENSE](LICENSE)。
标签:Android应用, Jetpack Compose, Kotlin, Python, 无后门, 路由器控制, 逆向工具