WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音通话、视频通话以及P2P文件分享的技术规范和开源项目,目的是让开发者可以在网页和移动应用中实现不依赖第三方插件的实时通信功能。
🔧 WebRTC 能做什么?
视频通话:如 Google Meet、Zoom网页版
语音通话:如 Discord、Messenger网页版
屏幕共享
实时聊天 + 文件传输(P2P)
多方会议
实时传感器或数据流传输
🧠 WebRTC 泄露 IP 的原理
✅ 1. WebRTC 需要获取局域网和公网 IP
WebRTC 为了实现端对端通信(P2P),必须知道用户设备的 真实 IP 地址,包括:
局域网 IP(如 192.168.x.x 或 10.x.x.x)
公网 IP(如果用户有公网地址或通过 STUN 获得)
它会使用一个机制叫 ICE(Interactive Connectivity Establishment) 来尝试连接路径,这需要收集所有候选网络地址(ICE candidates),包括:
主机候选(Host candidates)→ 本地 IP(内网 IP)
STUN 服务器返回的候选(Server reflexive candidates)→ 公网 IP
TURN 服务器候选(中继 IP)
这些信息是通过浏览器的 JavaScript API 中的 RTCPeerConnection 自动收集并暴露的。
✅ 2. 恶意网站可用 JS 窃取你的 IP
一个恶意网页可以运行如下 JS 代码,不经用户同意即可收集你的内网和公网 IP:
let pc = new RTCPeerConnection({iceServers: []});
pc.createDataChannel('');
pc.createOffer().then(offer => pc.setLocalDescription(offer));
pc.onicecandidate = event => {
if (event.candidate) {
console.log(event.candidate.candidate);
}
};
输出结果类似:
candidate:0 1 udp 2122252543 192.168.1.10 12345 typ host
candidate:1 1 udp 1686052863 203.0.113.45 45678 typ srflx raddr 192.168.1.10 rport 12345
192.168.1.10 是你的 本地 IP
203.0.113.45 是通过 STUN 获得的 公网 IP
这些数据是用来进行 NAT 穿透用的,但也可能被窃取。
🔓 为什么这是一种“泄露”?
因为:用户未明确授权访问 IP 地址,但 JS 就可以拿到。
浏览器对 WebRTC 的 ICE 候选信息没有默认限制;
VPN 用户即使通过 VPN 上网,仍可能泄漏其真实的本地 IP 或运营商 IP。
🔐 如何防止 WebRTC 泄露 IP?
方法 1:浏览器禁用 WebRTC(不推荐除非你不用视频通话)
Firefox:
地址栏输入:about:config
搜索:media.peerconnection.enabled → 设置为 false
Chrome:
安装扩展程序(如 WebRTC Control)
设置 chrome://flags 中的隐私选项(不总是可靠)
方法 2:使用 VPN 提供的 DNS 和 IP 防泄漏防护
一些 VPN 服务(如 NordVPN、ExpressVPN)会专门防止 WebRTC 泄漏公网 IP
方法 3:使用浏览器插件屏蔽 STUN
禁用 WebRTC 的好处
🚫 防止真实 IP 泄漏
🔐 增强隐私与匿名性
🧱 阻止潜在的恶意利用
禁用 WebRTC 的风险与影响
❌ 无法使用视频通话 Google Meet、Zoom Web、Discord 等直接无法开启音视频通话
❌ 屏幕共享失败 WebRTC 是浏览器中实现屏幕共享的核心机制之一
❌ P2P 数据传输失效 不支持基于 WebRTC 的文件传输服务(如 ShareDrop)
❌ 某些聊天网站功能损坏 Omegle、Chatroulette 等基于 WebRTC 的服务会报错或黑屏
❌ 企业内协作工具异常 一些在线协作工具(如 Microsoft Teams Web、Jitsi Meet)将无法使用音视频功能