频道栏目
首页 > 程序开发 > web前端 > JavaScript > 正文
通过JS获取真实的外网IP和内网IP以及IPv6地址的方法
2018-06-29 11:37:05         来源:kirinlau的专栏  
收藏   我要投稿

由于需求需要获取到本机ip地址,查了半天相关只是不知所云,最后偶然得已法,遂试,果然ok,直接看下文。

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

GetLocalIP Test

该方法在chrome和firefox下通用,代码如下,<喎"https://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:sql;"> [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);}); // getIPs(function(ip){alert("本机IP地址为:"+ip);});

因为Firefox和Chrome支持WebRTC,可以向STUN服务器请求,返回内外网IP,不同于XMLHttpRequest请求,STUN请求开发者工具当中看不到网络请求的。

解决办法

那么,接下来让我们继续装逼——关闭WebRTC。

点击复制链接 与好友分享!回本站首页
上一篇:jquery ajax开发中如何使用XMLHttpRequest对象的responseXML
下一篇:js读取usb扫码枪数据功能代码实现
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站