如何检测和防止 WebRTC 导致的 IP 泄露
简介:WebRTC 可能绕过代理暴露真实 IP。本文提供检测脚本和常见修复方案。
简介
WebRTC 功能可能导致 IP 泄露。即使你使用了代理,浏览器仍可能通过 WebRTC 暴露地址。
检测方法
打开浏览器控制台(F12),执行以下脚本。如果出现公网或内网 IP 输出,说明可能存在泄露风险。
(function () {
const iceServers = [
{ urls: "stun:stun.l.google.com:19302" },
{ urls: "stun:stun1.l.google.com:19302" },
{ urls: "stun:stun2.l.google.com:19302" },
{ urls: "stun:stun3.l.google.com:19302" },
{ urls: "stun:stun4.l.google.com:19302" },
];
function getUserIPs(callback) {
const myPeerConnection = new RTCPeerConnection({ iceServers });
myPeerConnection.createDataChannel("");
myPeerConnection.createOffer().then((offer) => myPeerConnection.setLocalDescription(offer));
myPeerConnection.onicecandidate = function (event) {
if (event.candidate) {
const parts = event.candidate.candidate.split(" ");
const ip = parts[4];
callback(ip);
}
};
}
getUserIPs((ip) => {
const ipv4Regex =
/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
const ipv6Regex =
/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}(([0-9a-fA-F]{1,4}:){1,4}|((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
if (ipv4Regex.test(ip)) {
console.log("WebRTC IPv4 Address:", ip);
} else if (ipv6Regex.test(ip)) {
console.log("WebRTC IPv6 Address:", ip);
} else {
console.log("WebRTC Local IP Address:", ip);
}
});
})();修复建议
- 安装浏览器扩展: WebRTC Network Limiter 、WebRTC Control 、WebRTC Leak Shield。
- 在代理工具中开启防 WebRTC 泄露选项(如有)。
- 测试后确认控制台不再输出可识别的真实 IP。