loliver1823/tplink-archer-be400-cli

GitHub: loliver1823/tplink-archer-be400-cli

面向 TP-Link Archer BE400 路由器的全功能 CLI 及 MCP 服务器,封装 192 个逆向 API 端点并支持 AI 助手直接交互管理路由器。

Stars: 0 | Forks: 0

# tplink-archer-be400-cli 专为 **TP-Link Archer BE400** 路由器打造的全功能 CLI + MCP 服务器 — 包含 192 个逆向工程的 API endpoint、37 个 CLI 命令、14 个用于 AI 集成的 MCP 工具(包括 Avira 家长控制域名屏蔽)。 ## 安装 ``` pip install git+https://github.com/loliver1823/tplink-archer-be400-cli.git ``` 或克隆并在本地安装: ``` git clone https://github.com/loliver1823/tplink-archer-be400-cli.git cd tplink-archer-be400-cli pip install . ``` ## 首次设置 ``` tplink-be400 --setup ``` 这会在 `~/.config/tplink-be400/config.toml` 路径下创建一个配置文件。请使用你的路由器 IP 和密码对其进行编辑: ``` [auth] password = "YourRouterPasswordHere" [routers.r1] host = "http://192.168.0.1" label = "Main Router" # 支持多个路由器: # [routers.r2] # host = "http://192.168.0.202" # label = "AP Mode Router" ``` 你也可以完全跳过配置文件,直接传入凭据: ``` tplink-be400 --host 192.168.0.1 --password YourPassword status ``` ## 用法 ``` tplink-be400 [args...] ``` 其中 `` 是你配置文件中的一个键(例如 `r1`)。 ### 所有命令 | 命令 | 描述 | |---------|-------------| | `status` | 路由器完整概览(CPU、内存、WAN、客户端、固件) | | `devices` | 列出所有已连接设备(有线 + 无线) | | `wifi` | 所有频段的 WiFi 设置 + OFDMA、TWT、WPS、Smart Connect | | `dhcp` | DHCP 配置、租约表和预留地址 | | `wan` | WAN/互联网状态、协议、流量控制、双重 NAT 检测 | | `lan` | LAN IP、子网、链路聚合、流量控制 | | `firewall` | SPI 防火墙、IoT 安全、访问控制概览 | | `access` | 访问控制详情(白名单/黑名单) | | `parental` | 家长控制 / 按设备屏蔽域名 (Avira):`parental [list \| devices \| block \| setfilter \| delete]` | | `nat` | NAT 加速、虚拟服务器、端口触发、DMZ、ALG | | `qos` | QoS 带宽控制、设备优先级列表、游戏加速器 | | `ddns` | 动态 DNS(TP-Link、DynDNS、No-IP) | | `upnp` | UPnP 状态和活跃服务映射 | | `imb` | IP-MAC 绑定设置和 ARP 表 | | `ports` | 物理端口状态(速度、双工、WAN/LAN) | | `iptv` | IPTV、IGMP snooping、端口分配 | | `guest` | 访客网络和强制门户设置 | | `mesh` | EasyMesh 状态和拓扑 | | `cloud` | TP-Link 云账户、固件更新检查 | | `disk` | USB 磁盘信息和 Time Machine 设置 | | `speedtest` | 测速结果和实时 WAN 吞吐量 | | `rebootsched` | 定时重启设置 | | `sharing` | USB/文件夹/媒体共享配置 | | `logs [TYPE]` | 系统日志(过滤项:NETWORK、NAT、FIREWALL、DHCP 等) | | `mode` | 操作模式(路由器/AP/中继器) | | `firmware` | 固件版本、自动升级设置、配置备份 | | `vpn` | VPN 配置(OpenVPN、PPTP、WireGuard) | | `admin` | 管理(远程管理、HTTPS、恢复、邮件提醒) | | `eco` | Eco 模式 / 节能设置 | | `led` | LED 控制和夜间模式计划 | | `time` | 时间/NTP 和 DST 设置 | | `diag` | 路由器诊断 | | `ipv6` | 完整的 IPv6 配置 | | `routes` | 路由表(系统 + 静态路由) | ### 高级命令 | 命令 | 描述 | |---------|-------------| | `read ` | 从任意 endpoint 读取原始数据 | | `write key=value ...` | 向任意 endpoint 写入设置 | | `reboot` | 重启路由器(需要确认) | | `endpoints` | 列出所有 192 个已知 API endpoint | | `dump` | 将每个可读设置导出为 JSON 文件 | | `monitor` | 持续的网络健康检查(ping + WAN 在线时间) | | `discover` | 扫描 LAN 以查找 TP-Link 管理 UI;可选参数 `--subnet`、`--match-model`、`--no-auth-discovery`、`--skip-persist`(跳过写入 `config.toml`) | ### 示例 ``` # 完整状态概览 tplink-be400 r1 status # 列出已连接设备 tplink-be400 r1 devices # 检查 WiFi 设置 tplink-be400 r1 wifi # 查看防火墙规则 tplink-be400 r1 firewall # 启用 WAN ping tplink-be400 r1 write security/firewall wan_ping=on # 设置 DMZ 主机 tplink-be400 r1 write nat/dmz enable=on ipaddr=192.168.0.100 # 家长控制:在一个设备上屏蔽 Smart-TV 广告/遥测域名 tplink-be400 r1 parental block TV-AdBlock D0-D0-03-D5-B4-E4 samsungads.com,samsungacr.com tplink-be400 r1 parental # list profiles # 读取原始 endpoint tplink-be400 r1 read wireless/statistics # 将所有内容导出为 JSON tplink-be400 r1 dump # 监控网络稳定性 tplink-be400 r1 monitor ``` ## 频率限制 / 路由器稳定性 BE400 的 Web 服务器是一个资源有限的嵌入式系统。**高频的 API 调用会导致路由器崩溃**,引发看门狗重启且不留下任何崩溃日志。 安全使用指南: - **单条命令始终是安全的。** 正常的 CLI 使用(一次执行一条命令)永远不会导致问题。 - **编写脚本**:在命令之间至少增加 2 秒的延迟。避免重复运行 `dump`。 - **会话流失**:每次 CLI 调用都会创建一个新的经过身份验证的会话(RSA 密钥交换 + AES 加密)。快速连续运行多条命令会在路由器上产生沉重的 CPU 负载。 - **`dump` 命令**按顺序读取所有 192 个 endpoint,耗时约 90 秒。不要在几分钟内多次运行它。 - **`monitor` 命令**被设计为使用 25 秒的轮询间隔。 如果路由器在繁重的 API 使用后无响应,请等待 60-90 秒,让其自动重启。 ## MCP 服务器(AI 集成) 本软件包包含一个 MCP(Model Context Protocol)服务器,允许像 Claude 和 Cursor 这样的 AI 助手直接通过结构化工具与路由器交互,而不是使用 shell 命令。 ### 为什么使用 MCP 而不是 Shell - **持久会话** — 一次 RSA+AES 握手即可在所有调用中重用(避免可能导致路由器崩溃的会话流失) - **内置频率限制** — API 调用之间最少间隔 1.5 秒,自动执行 - **结构化 JSON** — 每个响应都是干净的字典/列表,而不是需要解析的格式化文本 - **自动重连** — 如果会话超时,会静默重新进行身份验证 ### MCP 安装 ``` pip install git+https://github.com/loliver1823/tplink-archer-be400-cli.git ``` 然后注册服务器。对于 **Cursor**,创建/编辑 `~/.cursor/mcp.json`: ``` { "mcpServers": { "tplink-be400": { "command": "python", "args": ["-m", "tplink_be400.mcp_server"] } } } ``` 对于 **Claude Desktop**,将其添加到你的 `claude_desktop_config.json` 中: ``` { "mcpServers": { "tplink-be400": { "command": "python", "args": ["-m", "tplink_be400.mcp_server"] } } } ``` 添加配置后重启你的 AI 客户端。该服务器读取的凭据与 CLI 一样,均来自 `~/.config/tplink-be400/config.toml`。 ### MCP 工具(共 14 个) | 工具 | 描述 | 是否写入? | |------|-------------|---------| | `router_overview` | 一键仪表盘:固件、CPU、内存、WAN、WiFi 摘要、设备数量、互联网状态 | 否 | | `list_devices` | 所有已连接的客户端,包含 hostname、IP、MAC、连接类型 | 否 | | `get_setting` | 读取任何主题("wifi"、"wan"、"firewall" 等)或原始 endpoint 名称;可选 `router` 键(`r1`、`r2` 等) | 否 | | `change_setting` | 向 endpoint 写入 key=value 对,返回修改前后的 diff | **是** | | `get_logs` | 系统日志,支持可选的类型过滤(NETWORK、FIREWALL、NAT 等) | 否 | | `find_endpoints` | 按关键字搜索 192 个 endpoint 目录 | 否 | | `discover_routers` | 扫描 LAN 以查找 TP-Link Web 管理界面;可选身份验证;除非使用 `skip_persist`,否则会将新的 `[routers.*]` 添加到 `~/.config/tplink-be400/config.toml` | **是** (本地文件) | | `run_diagnostic` | 在一次调用中完成 Ping 测试 + 端口状态 + WAN 速度检测 | 否 | | `reboot_router` | 重启,带有强制的 `confirm: true` 安全门 | **是** | | `parental_profiles` | 列出 Avira 家长控制配置文件(ownerId、绑定的 MAC、屏蔽域名列表)和限制 | 否 | | `parental_devices` | 列出家长控制已知的设备(名称、MAC、类型、在线状态) | 否 | | `parental_block_domains` | 创建一个配置文件,为设备 MAC 屏蔽给定域名 —— 例如三星电视的广告/遥测。保持常规互联网正常(通过网关 DNS 同样屏蔽 HTTPS) | **是** | | `parental_set_filter` | 替换现有配置文件(`owner_id`、`domains`)的屏蔽域名列表 | **是** | | `parental_delete_profile` | 通过 `owner_id` 删除家长控制配置文件 | **是** | ### `get_setting` 主题 `get_setting` 工具接受聚合多个 endpoint 的高级主题名称: `wifi`, `wan`, `lan`, `dhcp`, `firewall`, `parental`, `nat`, `qos`, `vpn`, `admin`, `mesh`, `ipv6`, `ddns`, `upnp`, `led`, `eco`, `time`, `firmware`, `disk`, `sharing`, `iptv`, `imb`, `cloud`, `logs`, `ports`, `routes`, `guest` 或者传入任何 endpoint 简称(例如 `wireless/ofdma`、`nat/dmz`)进行单次原始读取。使用 `find_endpoints` 搜索目录。 ### MCP 示例 ``` # AI 调用 router_overview → 获取完整的 dashboard 为 JSON 格式 router_overview() → { firmware: { model: "Archer BE400", version: "1.1.2 ..." }, performance: { cpu_percent: 11.0, memory_percent: 46.0 }, clients: { total: 20 }, wan: { ip: "180.150.x.x", uptime_human: "4h 23m" }, ... } # AI 调用 get_setting 并指定 topic 为 "wifi" → 获取所有 WiFi 配置 get_setting(topic="wifi") → { data: { "wireless/wireless_2g": { ssid: "MyNetwork", channel: "6", ... }, ... } } # AI 调用 change_setting → 更改设置并进行确认 change_setting(endpoint="security/firewall", settings={"wan_ping": "on"}) → { success: true, changes: { wan_ping: { before: "off", after: "on" } } } # AI 调用 find_endpoints → 搜索 catalog find_endpoints(query="vpn") → { endpoints: [{ name: "openvpn/config", path: "admin/openvpn?form=config", operation: "read" }, ...] } ``` ### 家长控制(按设备屏蔽域名) BE400 基于 Avira 的家长控制通过 `parental_*` 工具暴露出来。每个“配置文件”(所有者)将一个或多个设备 MAC 绑定到一个屏蔽域名列表(最多 64 个域名)。屏蔽在网关处通过 DNS 操控执行,因此它也会断开到这些域名的 **HTTPS** 连接,同时保持设备的常规互联网完好无损。一个常见的用途是屏蔽 Smart-TV 的广告/遥测,而不影响网络的其余部分。 ``` # 在一个设备上屏蔽 Samsung Smart TV 广告/遥测 parental_block_domains( name="TV-AdBlock", macs="D0-D0-03-D5-B4-E4", domains="samsungads.com,samsungadhub.com,samsungacr.com", ) → { success: true, data: { ownerId: 0 } } # 之后进行检查、编辑或移除 parental_profiles() # find the ownerId + current lists parental_set_filter(owner_id="0", domains="samsungads.com,extra.com") # replaces the list parental_delete_profile(owner_id="0") # removes the block ``` ## 工作原理 该工具与路由器的内部 Web API 进行通信 —— 这与基于浏览器的管理面板使用的 API 相同。所有 endpoint 都是通过对路由器的 JavaScript bundle 进行逆向工程发现的。 身份验证使用 RSA + AES 加密(由 `tplinkrouterc6u` 库处理)。每个请求都通过与 Web UI 相同的加密通道进行。 ## 依赖 - [tplinkrouterc6u](https://github.com/AlexandrErohin/TP-Link-Archer-C6U) — TP-Link 路由器 API 库 - [pycryptodome](https://github.com/Legrandin/pycryptodome) — RSA/AES 加密 - [mcp](https://github.com/modelcontextprotocol/python-sdk) — Model Context Protocol SDK(用于 MCP 服务器) ## 兼容性 | 路由器 | 固件 | 状态 | |--------|----------|--------| | Archer BE400 v1.0 | 1.0.4 (2024) – v1.11.0 (2025) | 经过全面测试 | | 其他 TP-Link 路由器 | — | 可能部分可用 | ## 许可证 MIT
标签:MCP, TP-Link, 云资产清单, 家庭网络, 网络设备管理, 逆向工具, 逆向工程