005.随机指纹浏览器编译之webRTC随机IP
王辉辉的猫 2024-10-04 14:33:02 阅读 94
一、什么是webRTC
WebRTC(Web Real-Time Communication)是一种支持网页浏览器进行实时语音通话(voice)、视频聊天(video chat)和点对点文件分享的技术。该技术由世界各地的工程师和研究人员共同开发,广泛应用于视频会议、在线教育等。
二、webRTC指纹原理
WebRTC 指纹(WebRTC Fingerprinting)是指利用 WebRTC 从用户的浏览器中获取信息,并构建一个可辨识该用户的唯一标识(即“指纹”)的行为。但是 WebRTC 获取的信息有限,且其中最重要最有用的的部分,就是获取用户的真是IP。即使用户使用 VPN 或代理服务,隐藏其公网 IP 地址,也依旧能够被探测到。
三、通过webRTC获取自己的局域网ip
有攻才有防,先看看网站是如何通过webRTC获取你信息的。将下面的代码复制到F12控制台,就可以获取显示你的真实ip了,加了代理也没有
<code>function getLocalIPAddress(callback) { -- -->
// 创建一个RTCPeerConnection对象
let rtc = new RTCPeerConnection({
iceServers: [
{ urls: "stun:stun.miwifi.com"},
{ 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'},
]
});
// 监听本地ice候选的事件
rtc.addEventListener('icecandidate', function handleCandidate(evt) {
if (evt.candidate) {
// let ipAddress = evt.candidate.address;
// 获取IP地址
let ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/;
let match = ipRegex.exec(evt.candidate.candidate);
if (match) {
let ipAddress = match[1];
callback(ipAddress);
}
// 关闭peer connection并且移除监听
// rtc.close();
}
});
// 创建一个伪数据通道来触发ice事件
rtc.createDataChannel('');
// 创建并且触发offer来开始收集ice候选
rtc.createOffer().then(offer => rtc.setLocalDescription(offer)).catch(console.error);
}
// 使用函数
getLocalIPAddress(ip => console.log('your real IP is:', ip));
输出:
your real IP is: 192.168.xxx.xxx
tips:也可以通过一些在线网站查看自己的暴露的真实ip,如:https://browserleaks.com/webrtc
四、编译chromium源码来随机webRTC的返回值
第一篇文章写了如何编译chromium,假设你已经编译成功了。打开文件third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc
1.头部加上(随便加在一个#include
后面)
#include <iostream>
#include <cstdlib> // 包含rand()和srand()
#include <ctime> // 包含time()
2.找到下面的代码
String RTCIceCandidate::candidate() const {
return platform_candidate_->Candidate();
}
替换为
std::string generateRandomIP() {
srand(static_cast<unsigned int>(time(0))); // 为了每次运行生成不同的随机数
int ip_part = rand() % 256;
std::string ip = "192.168.1.";
ip += std::to_string(ip_part);
return ip;
}
String RTCIceCandidate::candidate() const {
//return platform_candidate_->Candidate();
return String(generateRandomIP());
}
3.编译
ninja -C out/Default chrome
既然网站从evt.candidate.candidate里获取我们的ip,我直接将其给篡改。
注意:返回空也是可以的,这2种方式都相当于禁用了webRTC的部分功能,可能导致webRTC不可用。
再次访问https://browserleaks.com/webrtc,发现真实ip已被隐藏
五、还有高手?
还有其他网站可以获取到我的真实ip啊,如:https://www.browserscan.net/
嘿嘿,不会的可以评论留言,我再出一期。
六、找工作。
有没有工资高,还没啥事情的工作啊,哈哈哈。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。