WebRTC 协议介绍 - Web API | MDN (mozilla.org)
知乎上看到评论科学上网“webrtc协议能知道你真实IP”,查了一下webrtc协议的原理,使用途径,
参考如何避免使用代理时WebRTC依旧泄露真实ip?附解决方案 (baidu.com)
WebRTC(Web实时通信)协议可能会泄露真实IP地址,这是因为WebRTC在一些浏览器中默认启用,并且可以通过JavaScript脚本直接获取本地IP地址。WebRTC通过STUN或TURN服务器获取用户的真实IP地址,以建立点对点连接。
WebRTC 泄漏真实 IP 的原理如下:
WebRTC 支持浏览器之间径直构建点对点连接,借此达成实时通讯,像视频、语音及数据传输等。在创建 WebRTC 连接之际,浏览器会朝对方传送自身的 IP 地址,以促使双方成功建立连接。攻击者能凭借 JavaScript 或其他技术来访问 WebRTC 里的 API,从而获取用户的 IP 地址。 WebRTC 的 STUN/TURN 服务器同样能够泄露用户的 IP 地址。STUN/TURN 服务器乃是 WebRTC 中用于 NAT 穿透与中继的关键构成部分。倘若这些服务器存在破绽或者配置不当,攻击者便能通过它们来获取用户的真实 IP 地址,进而造成威胁。
WebRTC 使用信令服务获取客户端真实ip,无须用户授权
GitHub - Mluocheng/webRTC_getIP: 通过webrtc 获取客户端真实ip
function getIPs(callback){
var ip_dups = {};
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
var useWebKit = !!window.webkitRTCPeerConnection;
if(!RTCPeerConnection){
var win = iframe.contentWindow;
RTCPeerConnection = win.RTCPeerConnection
|| win.mozRTCPeerConnection
|| win.webkitRTCPeerConnection;
useWebKit = !!win.webkitRTCPeerConnection;
}
var mediaConstraints = {
optional: [{RtpDataChannels: true}]
};
var servers = {iceServers: [{urls: "stun:stun.l.google.com:19302"}]};
var pc = new RTCPeerConnection(servers, mediaConstraints);
function handleCandidate(candidate){
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
var ip_addr = ip_regex.exec(candidate) && ip_regex.exec(candidate)[1];
if(!ip_addr) return;
if(ip_dups[ip_addr] === undefined)
callback(ip_addr);
ip_dups[ip_addr] = true;
}
pc.onicecandidate = function(ice){
if(ice.candidate)
handleCandidate(ice.candidate.candidate);
};
pc.createDataChannel("");
pc.createOffer(function(result){
pc.setLocalDescription(result, function(){}, function(){});
}, function(){});
setTimeout(function(){
var lines = pc.localDescription.sdp.split('\n');
lines.forEach(function(line){
if(line.indexOf('a=candidate:') === 0)
handleCandidate(line);
});
}, 1000);
}
getIPs(function(ip){
ip && console.log(ip);
});
参考WebRTC为什么会泄露我的真实IP (browserscan.net)
如何查看WebRTC是否隐私泄露
浏览器在连接VPN的情况下访问 BrowserScan,在IP地址部分可以看到通过代理获取的IP地址和通过WebRTC获取的真实IP地址。一些VPN或代理可能没有解决WebRTC泄露问题,因此仍然可能存在隐私和安全方面的问题。
如何阻止WebRTC泄露IP
- 完全禁用WebRTC: 在大多数现代浏览器中,你可以通过设置来禁用或限制WebRTC功能。通常,你可以在浏览器的设置或隐私选项中找到相关选项。禁用WebRTC是最简单的方法之一。
- 浏览器扩展或插件:有一些浏览器扩展或插件专门设计用于保护用户的隐私,可以阻止WebRTC泄露。例如,WebRTC Network Limiter、WebRTC Control、WebRTC Leak Prevent等插件可以帮助你更好地控制WebRTC。
- 选择更好的代理服务器或VPN:从上面我们可以知道,有些代理服务器或者VPN并不能阻止WebRTC的泄露,所以,再挑选这类服务的时候,请务必使用BrowserScan检查是否有WebRTC泄露的情况。
- 使用指纹浏览器(最佳):指纹浏览器在保护隐私方面是绝佳利器,市面上几乎所有的指纹浏览器都支持对WebRTC功能进行修改。这可以让第三方网站完全获取不到您的IP地址,即使能获取IP地址也是代理IP地址,并不会是真正的IP地址。有时候,替换比禁用更加拟真,这回让网站认为您是一个普通的用户。