代理后IP依旧裸奔?WebRTC出卖了你
偶然间看到 开了VPN但真实IP被WebRTC泄露 | 茗辰原 这篇文章,我按照教程检查一下,发现在使用网络代理的情况之下,网站确实通过 WebRTC 相关参数读取到了我的原始 Nat 外网地址,于是立即进行了相关设置,以下是更为基础的教程讲解
何为 WebRTC
WebRTC 是一套面向 Web 与移动端的开源实时通信 API 与协议栈,核心目标是摆脱服务端中转,让两端设备直接传输音视频媒体流与自定义数据;包含媒体采集、信令协商、网络探测、媒体传输、编解码等核心功能,通过 P2P 实现直连音视频通话、屏幕共享与数据传输,依靠 NAT 穿透方案解决跨局域网互通,是网页低延迟实时互动场景的底层基础设施。
真实公网 IP 如何被暴露
WebRTC 建立连接时会执行 ICE 网络探测,单独发起 STUN UDP 请求,这套底层网络逻辑不受浏览器 HTTP / SOCKS 代理管控,会直接访问公网 STUN 服务器拿到本机真实公网 IP,并将该地址存入 SDP 候选字段发送给通信对端,因此即便开启系统或浏览器代理,本机公网 IP 依然存在泄露风险;想要规避该问题,只能手动禁用 WebRTC 功能,或是强制所有媒体流量经由 TURN 中继服务器转发。
调用示例
async function getRealPublicIP() {
const pc = new RTCPeerConnection({ iceServers: [{ urls: "stun:stun.miwifi.com:3478" }] });
pc.createDataChannel("");
pc.createOffer().then(offer => pc.setLocalDescription(offer));
return new Promise(resolve => pc.onicecandidate = e => {
if (!e.candidate) return pc.close();
const ip = e.candidate.candidate.match(/(\d+\.){3}\d+/);
ip && resolve(ip[0]);
});
}快速在线测试
启用网络代理服务,使用 WebRTC Leak Test - BrowserLeaks 或 本站简易测试工具 检测,若 WebRTC Leak Test 一栏显示 ✔No Leak 或者没有出现红字提醒,代表你的 WebRTC 配置可以正确隐藏你的真实 IP 地址,若非以上情况,建议您根据以下提示调整以优化。
解决方案
电脑端 安装对应的 WebRTC 功能管理面板插件,这里以 Chrome 电脑版为例,点击 Chrome 插件 WebRTC Network Limiter 下载本站托管的 .crx 文件,其它渠道下载需要先行解压出对应浏览器插件文件,页面右上角菜单 / 扩展程序 / 管理扩展程序 / 打开右上角开发者模式 / 拖入文件 / 询问选择安装 / 点击 WebRTC Network Limiter 详情 / 确保状态为启用后点击 WebRTC Network Limiter / 选择 Use my proxy server (if present) / 退出该页面即可。
移动端 使用体积小,拓展功能丰富的 Via浏览器官网 - 崇尚速度与简约的手机浏览器,Via官方网站 (偶然发现官网源代码一个换行都没有,可看出其简洁程度),右下角菜单 / 设置 / 查找 WebRTC / 选择关闭即可。
个人感悟
WebRTC 一套优秀的开源实时通信 API 与协议栈,关闭后虽然影响部分 P2P 功能在 Web 与移动端的实现,但是国内网络环境下这种使用场景几乎很少,并且腾讯、阿里的会议功能基本只允许安装对应客户端软件使用,关闭并无大碍,可以更好避免IP泄露风险,优化隐私上网体验。
