缙哥哥的博客
与你分享我的点点滴滴生活

通过JS获取真实的外网IP和内网IP以及IPv6地址

280G全国流量的电信星海卡仅需29元/月,长期可续该套餐,随时可注销

通过JS获取你真实的外网IP内网IP以及IPv6地址,就算开代理也没有用,想想真是太可怕了,还能不能愉快的装逼了!效果如下:

20151009125151

代码如下

[code lang=”” start=”” highlight=””] //get the IP addresses associated with an account
function 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高速修正版》。

20151009124650

Firefox

用 media.peerconnection.enabled 禁用。BTW,方法网上看到了,电脑没装Firefox,所以你们自己摸索吧。

参考资料

  • https://github.com/diafygi/webrtc-ips
  • http://www.v2ex.com/t/167243
赞(3) 打赏
转载请注明来源及链接:缙哥哥 » 通过JS获取真实的外网IP和内网IP以及IPv6地址
如需 WordPress 优化加速、二次开发、托管等服务,可联系我购买付费服务:点此联系我 | 近期站内热门福利:

评论 7

评论前必须登录!

 

  1. #1

    只获取外网IP怎么改?

    luya7年前 (2016-11-30)
    • 什么意思?

      缙哥哥7年前 (2016-11-30)
      • 就是你写那个获取Ip地址代码,返回的是string,我的Ip地址位数不一定,不好截取,我如果只获取外网的Ip地址我要怎么改?因为这个代码我不怎么看得懂,不知道怎么改。

        luya7年前 (2016-11-30)
        • 我不是代码上每段都有注释吗?

          缙哥哥7年前 (2016-11-30)
        • 我看不明白英语 :16: 翻译感觉不大准确 我现在用的
          if(ip.indexOf(‘192’) == -1){
          console.log(“外网地址:”)
          console.log(ip);
          }
          这么蠢的办法。

          luya7年前 (2016-11-30)
        • 哈哈,慢慢研究,研究才好玩!

          缙哥哥7年前 (2016-11-30)
        • :08: 可是 可是 很急呀

          luya7年前 (2016-11-30)

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册