一、 执行摘要:当检测工具成为最大泄露源
在跨境电商、远程办公、隐私保护及安全测试场景中,开发者与从业者普遍习惯使用 IP 纯净度检测网站排查代理节点的真实伪装度。然而,经过对业内主流网络检测工具的网络流量抓包与前端代码反编译脱壳审计,我们发现了一个严重的安全悖论:部分宣称用于「帮助用户排查隐私泄漏」的工具,其自身的前端实现恰恰在未获用户显式交互的情况下,静默向其远端服务器发送包含真实公网 IP 的请求。
本白皮书针对四大代表性工具(IPOK、ping0.cc、Whoer.net、Scamalytics)在 WebRTC 穿透处理、DNS 测漏机制、客户端指纹扫描及服务端数据留存等关键维度进行横向实测对比,旨在公开技术证据,厘清诊断工具的隐私工程边界。
二、 核心实测对比矩阵
| 测评维度 | IPOK (ipok.io) | ping0.cc | Whoer.net | Scamalytics |
|---|---|---|---|---|
| WebRTC 探测机制 | 纯本地解析,0 上传 | 自建 STUN 穿透后静默 POST 上报 | 服务端代理收集 | 不提供 WebRTC 探测 |
| WebRTC 触发方式 | 用户手动点击启动 | 首页加载后自动静默发起 | 页面加载自启 | - |
| 真实 IP 关联持久化 | WebRTC 候选不回传、不建 IP 配对;常规流量依隐私政策保留防刷日志 | 客户端实测向 /ip/peer 发送包含 IP 与屏幕尺寸的请求(服务端留存未公开) | 会话关联 | 商用日志合规留存 |
| DNS 测漏权威设计 | 自建权威优先(300s 逻辑过期惰性清理、无访问日志);故障时回退 bash.ws | 自建权威,50 次高频并发查询 | 自建解析器 | - |
| 客户端指纹探测 | 仅端侧本地诊断,0 服务端建档上传 | 371KB 指纹库探针(检测 6 大防关联浏览器等属性) | Flash/Java/Canvas 基础指纹 | 无前端探针 |
| 第三方广告与追踪器 | 不加载第三方广告与追踪脚本(仅自营赞助卡与无身份聚合统计) | 自建 /trackad2 探针 | 加载第三方商业广告与追踪 | 企业官网分析工具 |
三、 逆向实测与抓包证据深度解构
3.1 WebRTC 静默窃取物理公网 IP 链路
WebRTC 的 ICE(Interactive Connectivity Establishment)机制在建立 P2P 音视频通道时,会向 STUN 服务器发起 UDP 请求以发现主机的反射地址(Server Reflexive Candidate)。当访客使用普通 HTTP 或 SOCKS 代理上网,且浏览器未配置 WebRTC 隔离时,UDP 流量会绕过代理直接穿透至 STUN 服务,从而暴露真实的本地物理宽带公网 IP。
peer: function() {
const RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection;
if (!RTCPeerConnection) return;
// 1. 指定其自建 STUN 节点穿透代理 NAT
const pc = new RTCPeerConnection({
iceServers: [{ urls: "stun:ping0.cc:3478" }]
});
pc.onicecandidate = (event) => {
if (event.candidate) {
const candidateIp = event.candidate.candidate.split(' ')[4];
// 2. 排除私网保留地址(10.x, 192.168.x 等)
if (candidateIp.indexOf('local') === -1 && !this.isreserve(candidateIp)) {
const winSize = window.innerWidth + '-' + window.innerHeight;
// 3. 异步向远端端点发送包含 candidate IP 与屏幕尺寸的 POST 请求
axios.post("/ip/peer", {
ip: candidateIp,
size: winSize
});
}
}
};
pc.createOffer({ offerToReceiveAudio: true })
.then(offer => pc.setLocalDescription(offer));
}在 2026-10 的一次浏览器客户端网络抓包与代码观察中,页面加载后前端脚本向其自建 STUN 发起穿透,并将提取出的非私网 candidate IP 连同屏幕尺寸作为载荷向 /ip/peer 发出 POST 请求。需要说明的是,客户端抓包只能证实当时存在这些参数向相关端点发送的行为,不能直接证明服务端后端的实际保存期限、具体用途或当前运营方动机。但对于使用普通二级代理的访客而言,该网络请求客观上将未经代理覆盖的公网 IP 发送到了远程服务器。
3.2 IPOK 零知识与纯本地处理模型
IPOK 在设计 WebRTC 测漏模块时设立了严格的物理隔离红线:
- 显式操作许可: 页面加载时绝对不自启 WebRTC 握手;仅当用户在界面中手动点击「开始测试」时才初始化 RTCPeerConnection。
- 中立公共基础设施: 仅连接 Google (`stun.l.google.com:19302`) 与 Cloudflare 公共基础设施,不设私有接收端点。
- 浏览器端只读比对: 提取出的 ICE 候选地址仅驻留于前端 JS 内存,用于与当前 HTTP 出口 IP 比对并在 DOM 渲染结果。整个会话期间,向 IPOK 服务器发起的网络回传请求数量为恒定零。
3.3 自建 DNS 测漏后端的数据最小化准则
DNS 测漏需要自建权威名称服务器(如 leak.ipok.io)来捕获由递归解析器发来的随机前缀查询。许多平台在此环节开启全量查询日志并长期留存。IPOK 落地了工业级的瞬态无痕架构:
• 会话生命周期有界: 测试 ID 的有效生命周期限制在 300 秒以内(过期后即不可读),并在后续会话操作时进行惰性内存清理。
• 零持久化数据库: 会话数据仅暂存于内存字典,不写磁盘数据库,服务进程重启即物理毁灭全部历史记录。
• Caddy 反代无访问日志: 对外 HTTPS API 明确关闭 access log,禁止记录请求 IP、时间戳及会话 ID。
注:生产环境中自建服务优先响应;若首次签发不可用会自动回退 bash.ws,旧版客户端亦保持回退兼容。
四、 用户端防御指南:如何防止网络自查被背刺
无论使用何种在线检测服务,用户均可通过以下技术手段加固自身终端环境:
- 浏览器端强制禁用 WebRTC 穿透: 在 Chrome/Edge 中配置 WebRTC IP 处理策略为 disable_non_proxied_udp(通过策略或 WebRTC Control 扩展),在 Brave 浏览器设置中选择「Disable non-proxied UDP」;在 Firefox 中将 about:config 里的 media.peerconnection.enabled 设为 false。
- 采用全局 TUN 虚拟网卡代理: 优先使用 Sing-box / Clash 等客户端的 TUN 模式将系统全局(包含 UDP 协议)完全接管,避免局部 HTTP 代理留下 UDP 直连穿透漏洞。
- 审查网络请求面板: 打开任意 IP 检测站时,按 F12 打开网络面板,搜索是否存在发送至 /ip/peer、/track 或类似端点的秘密 POST 请求。
五、 结论与行业呼吁
网络检测与风控查询工具应当是用户捍卫网络安全与透明度的盟友,绝不应成为出卖用户真实身份的温床。IPOK 倡议行业全量普及「无静默外传真实公网 IP、WebRTC 纯本地比对、有界数据留存」的隐私准则,让开发者和出海从业者在一个诚实、透明、可验证的环境中探索网络。