通过JS获取你真实的外网IP和内网IP以及IPv6地址,就算开代理也没有用,想想真是太可怕了,还能不能愉快的装逼了!效果如下:
代码如下
[code lang=”” start=”” highlight=””] //get the IP addresses associated with an accountfunction getIPs(callback){
var ip_dups = {};
//compatibility for firefox and chrome
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
//bypass naive webrtc blocking
if (!RTCPeerConnection) {
var iframe = document.createElement(‘iframe’);
//invalidate content script
iframe.sandbox = ‘allow-same-origin’;
iframe.style.display = ‘none’;
document.body.appendChild(iframe);
var win = iframe.contentWindow;
window.RTCPeerConnection = win.RTCPeerConnection;
window.mozRTCPeerConnection = win.mozRTCPeerConnection;
window.webkitRTCPeerConnection = win.webkitRTCPeerConnection;
RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
}
//minimal requirements for data connection
var mediaConstraints = {
optional: [{RtpDataChannels: true}] };
//firefox already has a default stun server in about:config
// media.peerconnection.default_iceservers =
// [{“url”: “stun:stun.services.mozilla.com”}] var servers = undefined;
//add same stun server for chrome
if(window.webkitRTCPeerConnection)
servers = {iceServers: [{urls: “stun:stun.services.mozilla.com”}]};
//construct a new RTCPeerConnection
var pc = new RTCPeerConnection(servers, mediaConstraints);
//listen for candidate events
pc.onicecandidate = function(ice){
//skip non-candidate events
if(ice.candidate){
//match just the IP address
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
var ip_addr = ip_regex.exec(ice.candidate.candidate)[1];
//remove duplicates
if(ip_dups[ip_addr] === undefined)
callback(ip_addr);
ip_dups[ip_addr] = true;
}
};
//create a bogus data channel
pc.createDataChannel(“”);
//create an offer sdp
pc.createOffer(function(result){
//trigger the stun server request
pc.setLocalDescription(result, function(){}, function(){});
}, function(){});
}
//Test: Print the IP addresses into the console
getIPs(function(ip){console.log(ip);});
[/code] 因为Firefox和Chrome支持WebRTC,可以向STUN服务器请求,返回内外网IP,不同于XMLHttpRequest请求,STUN请求开发者工具当中看不到网络请求的。
解决办法
那么,接下来让我们继续装逼——关闭WebRTC。
Chrome
安装插件 https://chrome.google.com/webstore/detail/webrtc-block/nphkkbaidamjmhfanlpblblcadhfbkdm?hl=en
无法下载的一定是你上网姿势不科学,去缙哥哥的博客看看《畅游无限浏览器 第十版0802高速修正版》。
Firefox
用 media.peerconnection.enabled 禁用。BTW,方法网上看到了,电脑没装Firefox,所以你们自己摸索吧。
参考资料
- https://github.com/diafygi/webrtc-ips
- http://www.v2ex.com/t/167243
只获取外网IP怎么改?
什么意思?
就是你写那个获取Ip地址代码,返回的是string,我的Ip地址位数不一定,不好截取,我如果只获取外网的Ip地址我要怎么改?因为这个代码我不怎么看得懂,不知道怎么改。
我不是代码上每段都有注释吗?
我看不明白英语 :16: 翻译感觉不大准确 我现在用的
if(ip.indexOf(‘192’) == -1){
console.log(“外网地址:”)
console.log(ip);
}
这么蠢的办法。
哈哈,慢慢研究,研究才好玩!
:08: 可是 可是 很急呀