手法一:WebRTC 抓真实 IP ,再 POST 回服务器
打开 ping0 时,它的 check.js 里有个 peer()函数(代码混淆过,但逻辑很清楚):
- 新建 RTCPeerConnection ,配上 STUN 服务器;
- 监听 ICE candidate ,从候选串里把 IP 抠出来;
- 然后 axios.post(/ip/peer, { ip: 你的真实 IP }),发回 ping0 自己的服务器。
WebRTC 这个 IP 能绕过你的代理/VPN——这正是它"危险"的地方。你以为在用代理 IP 查询,它却从 WebRTC 拿到了你代理背后的真实地址,还发回了服务器。
抓包里你会看到一个 POST https://ping0.cc/ip/peer 。
手法二:双栈( IPv4 + IPv6 )交叉强制抓取
ping0 的页面同时从两个子域名加载脚本:
https://ipv4.ping0.cc/geo/jsonp/ipv4cb
https://ipv6.ping0.cc/geo/jsonp/ipv6cb
ipv4.ping0.cc 只解析 A 记录、ipv6.ping0.cc 只解析 AAAA 记录——这样强制你的浏览器分别走 IPv4 和 IPv6 各连一次。哪怕你只用 IPv6 上网,它也能把你的 IPv4 钓出来(反之亦然)。双栈用户的两个地址,一个都跑不掉。
手法三:把你的 IPv4 和 IPv6 配对,记到服务器(最致命)
这是压死骆驼的一根稻草。ping0 的 JS 原文(去混淆后):
js
axios({ method: 'get', url: '/logv6/' + window.ipv6 + '/' + ip })
也就是说,它会发一个:
GET https://ping0.cc/logv6/{你的 IPv6}/{你的 IPv4}
把你的 IPv6 和 IPv4 配成一对、记到 ping0 的服务器上。这已经不是"检测"了,这是建立你真实身份的关联档案。我实测时这个请求确确实实发出去了,URL 里就明晃晃挂着我这台机器的两个真实地址。
复现步骤( 30 秒,你自己验)
1. 浏览器打开 https://ping0.cc ,按 F12 → Network (网络)面板;
2. 刷新页面;
3. 在请求列表里搜 peer 、logv6 、ipv4.ping0 ,三个都在;
4. 点开 logv6/...那条,URL 里就是你的 IPv6/IPv4 配对。
这意味着什么
- 你拿 ping0 测一个代理/VPS 的 IP 时,它可能顺手把你本机的真实 IP 也抓走、还把你的 v4/v6 关联起来记档;
- 对在意匿名性、做跨境/多账号/科学上网的人,这是实打实的去匿名风险。
### 怎么保护自己
- 浏览器禁用 WebRTC ( Firefox 改 media.peerconnection.enabled=false ,Chrome 装 WebRTC 控制类插件);
- 或者,换一个不这么干的网站。

