WebRTC 泄露检测
在浏览器本地建立 WebRTC 连接,收集全部 ICE 候选并区分 host/srflx/relay,标出被 mDNS 掩码的地址与真实局域网地址,生成「网页能拿到你哪些 IP」的报告;可选开启公共 STUN 以观察公网出口地址。
为什么网页能知道你的 IP
页面里建一个 WebRTC 连接时,浏览器会把自己的候选地址交给对端;站点只要读一下 <code>peerConnection</code> 的候选列表就能拿到,不必等页面发请求。这是当年 IPv6 推断、局域网拓扑发现的基础功能。
本工具不建任何到第三方的连接,候选全部收集在你自己浏览器里;不加 STUN 时看到的就只有本机地址。
mDNS 掩码
Chrome / Edge / Firefox 现在默认把 host 候选换成一个随机主机名(形如 <code>a1b2c3d4-….local</code>),局域网 IP 就不会直接暴露。这是浏览器侧的默认行为,不是本页做的处理。
一个副作用:需要摄像头/麦克风权限的站点往往能拿到真实地址 —— 授权的那一刻起掩码对该站点就失效了。所以别为了「一个小功能」随手授权。
STUN 与 TURN 的区别
STUN 只用来问「从外面看我的地址是什么」,所以加了它之后会多出 <code>srflx</code> 候选 —— 那就是你的公网出口 IP,同时也意味着 STUN 服务器知道你在用它。
TURN 是中继 relayed 候选,地址是中继服务器的,对网站不可见。真要隐藏出口地址,得让对端只能拿到 relay 候选,那是浏览器扩展或 VPN 的活,本页做不到也不假装做得到。
常见问题
这个工具会不会把我的 IP 发出去?
不加 STUN 时不会,检测全程在浏览器本地完成,一个包都不发出去。勾上 STUN 后会向 Google 与 Cloudflare 的 STUN 服务器发一次探测请求 —— 这是 STUN 的工作方式,无法既用它又不联系它。
没有收集到候选说明什么?
可能是浏览器或系统禁用了 WebRTC,也可能这台机器没有可用网卡。这类环境下 WebRTC 本身就没被允许,站点自然也拿不到东西。
候选是随机生成的吗?
每次重新检测端口与随机主机名都会变,这正是掩码有效的原因。只有在拿到媒体权限等特定情况下,候选里才会是真实地址。
检测结果能当结论用吗?
不能。它只反映这一次、这一份配置下浏览器愿意交出什么;同一台机器换浏览器、换网络、授权过摄像头之后,结果都可能不同。要判断是否安全,看 VPN 的接管范围与浏览器设置更靠谱。