服务发现与批量接入
一键发现 用于在 fn-knock 能访问的本地 IPv4 网段中寻找 HTTP 服务,并把识别结果转换成待确认的子域映射或路径映射。它不会扫描公网,也不会在扫描到开放端口时自动发布服务。
入口与前置条件
服务发现不是独立菜单,入口位于:
子域映射 → 一键发现:先保存根域名,扫描结果会生成业务 Host;路径映射 → 一键发现:仅在内网穿透 → 路径模式中显示,扫描结果会生成路径规则。
子域映射中,根域名尚未保存或页面存在未保存修改时不能开始发现。扫描只验证 fn-knock 所在运行环境能否连接目标;Docker 中的网络视角与宿主机不同,宿主机服务必须能从容器网络到达。
扫描目标
打开一键发现后,可展开扫描目标设置。默认目标来自当前运行环境:
| 来源 | 说明 |
|---|---|
| 回环 | 非 Docker 部署使用 127.0.0.1/32 |
| Docker 宿主机 | Docker 部署根据管理入口识别可达的宿主机网段 |
| 网卡 | 当前环境中允许扫描的本地 IPv4 网卡网段 |
| 已有映射 | 从现有子域或路径映射的 Target 推导 |
| 自定义 | 管理员手动添加并保存的 CIDR |
| 已保存 | 以前保存、当前仍作为扫描范围的 CIDR |
只接受完整落在以下范围内的 IPv4 CIDR:
- 回环
127.0.0.0/8; - RFC 1918 私网
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16; - CGNAT
100.64.0.0/10; - 链路本地
169.254.0.0/16。
单次最多选择 16 个 CIDR,去重后合计最多 1024 台主机。输入较大的网段时,应改成更窄的 CIDR,而不是依赖系统截断扫描结果。
“恢复自动选择”会重新跟随当前自动目标。手动勾选、取消或添加 CIDR 后必须保存;直接开始扫描时,页面也会先尝试保存当前范围。至少要保留一个目标。
扫描范围与强度
每台目标主机会探测 80–60000 端口,但会跳过 fn-knock 自身和已知内部服务端口,扫描本机时还会额外避开容易形成自探测的端口。发现开放 TCP 端口后,系统再发起 HTTP 请求识别服务;单纯开放的非 HTTP 端口不会生成候选映射。
扫描强度可以跟随设备推荐,也可以手动选择:
| 档位 | 目标并发 |
|---|---|
| 低 | 32 |
| 中 | 115 |
| 高 | 256 |
| 极高 | 512 |
实际并发不会机械达到表中数值。系统还会根据 CPU 核心、可用内存、文件句柄上限及容器资源限制计算安全上限,并取两者较小值。自动模式默认开启,会在设备能力变化后重新推荐档位。
档位只影响耗时和设备负载,不改变 CIDR、端口范围或识别规则。NAS、路由器和低内存设备优先保留自动或低强度;并发调高后仍很慢,通常是扫描范围过大,而不是档位失效。
识别结果
扫描窗口会持续显示主机、端口、进度和已识别服务。系统会根据 HTTP 状态、响应头和页面特征识别常见应用;无法精确识别时,会以页面标题或 HTTP + 端口 生成通用候选。
候选值只是建议:
- 子域模式会建议子域名,并默认创建需要登录、启用 WAF、保留上游 Host 的映射;
- 路径模式会建议路径、是否改写 HTML、是否使用根目录模式及是否设为默认路由;
- 检测到上游 Basic Auth 时只会提示风险,不会自动保存其用户名和密码;
- 已存在相同 Target、Host、路径或重复候选时,页面会过滤或拒绝批量保存。
保存前逐项检查候选名称和 Target。通用识别无法知道应用的真实基础路径、回调 URL、WebSocket、Cookie 或可信代理要求,批量添加成功也不代表公网访问已经可用。
停止扫描或关闭窗口会取消当前任务;已经显示的候选只有点击批量保存后才会进入配置。
推荐操作顺序
- 先从 fn-knock 所在环境确认目标 IP 和端口可达。
- 保存根域名或切换到正确的路径模式。
- 打开一键发现,展开设置并把 CIDR 收窄到实际设备网段。
- 资源有限时保持自动或低强度,开始扫描。
- 取消不需要公开的候选,并修改冲突或含义不清的子域名、路径。
- 批量保存后,逐条检查认证、WAF、Target 和路由选项。
- 先从局域网验证上游,再用移动网络验证公网 DNS、隧道、证书和登录。
- 在请求日志确认 Host、来源 IP、路由和上游状态。
常见问题
扫描不到宿主机服务
Docker 中的 127.0.0.1 是容器本身。确认服务没有只监听宿主机回环地址,并使用容器可达的宿主机地址;同时检查 Docker 网络、防火墙和服务监听范围。
非 Docker 部署还要确认目标落在允许的本地 IPv4 范围内。IPv6、域名和公网地址不能作为发现 CIDR,但发现完成后仍可手动创建合法 Target。
找到端口但没有候选
服务发现只生成可通过 HTTP 分析的候选。TCP、UDP、TLS-only 或要求特殊握手的服务可能只有端口开放而没有结果。HTTP 服务如果把明文请求强制交给只支持 HTTPS 的端口,也可能被忽略;这种情况应手动添加映射并验证协议。
扫描耗时过长或设备负载高
先缩小 CIDR 和主机数,再降低强度。扫描最多可能覆盖 1024 × 59921 个端口探测,目标范围比并发档位更决定总工作量。关闭窗口可取消任务,但已经发出的少量网络探测可能需要等待超时结束。
候选服务重复或端口不符合预期
同一应用可能在多个端口返回相似页面,系统会按识别键合并部分结果,但不能替管理员判断真实入口。保留上游正式监听端口,删除健康检查、跳转端口或已由其他映射接管的候选。
