-
Notifications
You must be signed in to change notification settings - Fork 0
Web Console
带登录的网页界面:看运行状态、查请求流、试一试某个 URL、改配置、管集群节点。
ipclick run -w==============================================================
IPClick Web 管理端: http://127.0.0.1:9530/
用户名: admin
密码: N8mSKkdPbpiGzB128At3
⚠️ 该密码为本次启动随机生成,重启后失效。
==============================================================
[WEB]
enabled = false # 命令行 -w / --web 会覆盖它
port = 9530
host = "127.0.0.1" # 默认只监听本机登录凭据是机密,走 .env:
IPCLICK_WEB_USER=admin
IPCLICK_WEB_PASSWORD=<一串够长的>都不设的话每次启动随机生成密码并打印到控制台。 不预置 admin/admin 是刻意的—— 默认弱口令是这类管理界面被打穿的头号原因。
⚠️ 默认只监听127.0.0.1。 这个界面后面就是一个能代发任意请求的服务, 不该默认对外。要远程访问请用 SSH 隧道:ssh -L 9530:127.0.0.1:9530 user@server或者放在做了 TLS 终止的反向代理之后——它本身是明文 HTTP,密码会在网络上裸奔。
- 服务端状态:监听地址、worker 数、运行时长
- 鉴权与 TLS 是否启用
- 每个适配器的可用性,浏览器引擎显示三态: 未安装 / 包已装但浏览器本体未就绪 / 就绪
- 集群摘要:形态、本节点 id、节点健康状况
- 请求统计:总数、成功率、按适配器与状态码分布
引擎的三态是分开显示的,因为处理动作不同:一个是 pip install,一个是
camoufox fetch,混成"不可用"会让人查错方向。
每个请求一条记录,实时刷新(默认 2 秒轮询 /api/trace)。
| 列 | 说明 |
|---|---|
| 时间 | 完成时刻 |
| 节点 | 实际执行的节点 id —— 集群转发是否生效看这里 |
| 适配器 | 实际用了哪个(browser 会显示解析后的具体引擎) |
| 方法 / URL |
[TRACE].record_url = false 时只显示 host |
| 状态码 |
-1 表示传输故障 |
| 耗时 | 毫秒 |
| 重试 | 内部重试次数 |
支持按状态、适配器、节点、关键词筛选。
关键词是字面匹配。 URL 里
%和_很常见(/api_v2/、utm_source=), 底层 SQL 的LIKE会把它们当通配符,所以查询前做了转义——搜api_v2不会匹配到apiXv2。
开了 [TRACE].sqlite_enabled 才能查历史和跨天统计;不开就只有内存里最近
memory_size 条(默认 500),进程重启即丢。详见链路记录。
输入一个 URL 直接发请求,看链路和源码。适合验证配置改对了没有、 某个站点用哪个适配器能过。
可以选:方法、适配器、超时、是否走代理、automation_script(需要服务端
allow_scripts = true)。
结果显示状态码、耗时、响应头、执行节点、重试次数,以及响应体源码。
两条限制,都是刻意的:
- 源码最多显示 256 KB。 再多浏览器渲染会卡,而看源码这件事看前几十 KB 基本够判断。
- 超时上限 120 秒。 页面是同步等结果的,让它能等十分钟等于给自己留一个占满 worker 的口子。
用的是 Post/Redirect/Get:提交后重定向再展示,刷新页面不会重复发请求。
改白名单内的行为配置,写回 ipclick.toml。
写入方式:定点文本替换 → 保留注释与格式;改动前留 .bak;
写临时文件再 os.replace → 断电不会留下半个配置文件。
每一项标了是否需要重启生效。日志级别、调试模式、only_errors、record_url
这些是热生效的;max_workers、监听地址这些要重启。
可改的分组:
| 分组 | 项 |
|---|---|
| 服务端 | worker 线程数、调试模式 |
| 日志 | 级别、输出位置 |
| 下载行为 | 单次请求超时、连接超时、按 host 并发与 QPS、重试四项 |
| 浏览器 | 启用开关、引擎、无头、并发页面上限、页面加载与脚本超时 |
| 链路记录 | 内存条数、SQLite 开关与路径、保留天数、只记失败、记录完整 URL |
| 集群 | 转发形态、本节点 id、负载均衡、故障转移与探活阈值 |
| 客户端 | RPC 重试与退避、请求压缩策略与门槛 |
集群节点列表的增删改,同样写回 ipclick.toml。提交前会校验地址格式、id 唯一性等,
校验不过就整批拒绝——写进去一半是最难排查的状态。
节点的 token 不在这里管。 令牌由集群共享密钥派生,见集群。
不可从网页修改:
-
[SECURITY]全部 —— 鉴权令牌、TLS、SSRF 防护 - Web 管理端自己的登录凭据
- 集群共享密钥与各节点 token
[BROWSER].allow_scripts
理由:这些是安全边界本身。一个能改安全边界的管理界面,等于把整条防线的强度降到 "这个界面的登录有多牢"。攻破 Web 登录不该等于能关掉 SSRF 防护、能拿到令牌、 能打开任意 JS 执行。这几项只能改配置文件 + 重启——那需要机器上的访问权限。
同样地,Web 管理端从不显示任何机密。总览页只说"鉴权:已启用",不显示令牌值。
| 措施 | 说明 |
|---|---|
默认只监听 127.0.0.1
|
见上文 |
| 无默认口令 | 不设就随机生成并打印 |
| CSRF 令牌 | 所有 POST 都校验 |
HttpOnly + SameSite=Strict 会话 cookie |
防 XSS 窃取与跨站提交 |
CSP default-src 'none'
|
页面不加载任何外部资源;样式脚本全内联 |
| 登录失败限速 | 防暴力破解 |
| 不显示机密 | 见上文 |
| 安全边界不可网页修改 | 见上文 |
/api/status 和 /api/trace 返回 JSON,供前端轮询,也可以自己拿去做监控。
需要同一个会话 cookie——不是免鉴权的开放接口。
curl -c c.txt -d "username=admin&password=..." http://127.0.0.1:9530/login
curl -b c.txt http://127.0.0.1:9530/api/trace?limit=50Web 管理端 [WEB]
|
集群状态页 [CLUSTER.status_page]
|
|
|---|---|---|
| 默认端口 | 9530 | 9529 |
| 登录 | 有 | 无 |
| 能改东西 | 能(白名单内) | 不能,纯只读 |
| 内容 | 全局状态、请求流、试一试、配置、节点 | 只有集群节点与健康状态 |
两个都默认只监听本机。