Skip to content

Web Console

HadesTop edited this page Aug 14, 2026 · 7 revisions

Web 管理端

带登录的网页界面:看运行状态、查请求流、试一试某个 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,混成"不可用"会让人查错方向。

请求流 /trace

每个请求一条记录,实时刷新(默认 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),进程重启即丢。详见链路记录

试一试 /test

输入一个 URL 直接发请求,看链路源码。适合验证配置改对了没有、 某个站点用哪个适配器能过。

可以选:方法、适配器、超时、是否走代理、automation_script(需要服务端 allow_scripts = true)。

结果显示状态码、耗时、响应头、执行节点、重试次数,以及响应体源码

两条限制,都是刻意的:

  • 源码最多显示 256 KB。 再多浏览器渲染会卡,而看源码这件事看前几十 KB 基本够判断。
  • 超时上限 120 秒。 页面是同步等结果的,让它能等十分钟等于给自己留一个占满 worker 的口子。

用的是 Post/Redirect/Get:提交后重定向再展示,刷新页面不会重复发请求。

配置 /config

改白名单内的行为配置,写回 ipclick.toml

写入方式:定点文本替换 → 保留注释与格式;改动前留 .bak; 写临时文件再 os.replace → 断电不会留下半个配置文件。

每一项标了是否需要重启生效。日志级别、调试模式、only_errorsrecord_url 这些是热生效的;max_workers、监听地址这些要重启。

可改的分组:

分组
服务端 worker 线程数、调试模式
日志 级别、输出位置
下载行为 单次请求超时、连接超时、按 host 并发与 QPS、重试四项
浏览器 启用开关、引擎、无头、并发页面上限、页面加载与脚本超时
链路记录 内存条数、SQLite 开关与路径、保留天数、只记失败、记录完整 URL
集群 转发形态、本节点 id、负载均衡、故障转移与探活阈值
客户端 RPC 重试与退避、请求压缩策略与门槛

节点 /nodes

集群节点列表的增删改,同样写回 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

/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=50

和集群状态页的区别

Web 管理端 [WEB] 集群状态页 [CLUSTER.status_page]
默认端口 9530 9529
登录
能改东西 能(白名单内) 不能,纯只读
内容 全局状态、请求流、试一试、配置、节点 只有集群节点与健康状态

两个都默认只监听本机。

Clone this wiki locally