前端JS获取内网IP地址

标题前端JS获取内网IP地址

针对谷歌浏览器的设置,才能显出出IP
1、在chrome 浏览器地址栏中输入:chrome://flags/
2、搜索 #enable-webrtc-hide-local-ips-with-mdns 该配置 并将属性改为 disabled
3、点击relaunch 浏览器即可查看到本机的内网IP地址

//调用
getIP( function (ip) {
      /*console.log(ip);*/
     alert(ip);
  })

//获取内网ip的方法
function getIP(callback) {
         let recode = {};
         let RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
         // 如果不存在则使用一个iframe绕过
         if (!RTCPeerConnection) {
             // 因为这里用到了iframe,所以在调用这个方法的script上必须有一个iframe标签
             // <iframe id="iframe" sandbox="allow-same-origin" style="display:none;"></iframe>
             let win = iframe.contentWindow;
             RTCPeerConnection = win.RTCPeerConnection || win.mozRTCPeerConnection || win.webkitRTCPeerConnection;
         }
 
         //创建实例,生成连接
         let pc = new RTCPeerConnection();
 
         // 匹配字符串中符合ip地址的字段
         function handleCandidate(candidate) {
             let ip_regexp = /([0-9]{1,3}(\.[0-9]{1,3}){3}|([a-f0-9]{1,4}((:[a-f0-9]{1,4}){7}|:+[a-f0-9]{1,4}){6}))/;
             let ip_isMatch = candidate.match(ip_regexp)[1];
             if (!recode[ip_isMatch]) {
                 callback(ip_isMatch);
                 recode[ip_isMatch] = true;
             }
         }
 
         //监听icecandidate事件
         pc.onicecandidate = (ice) => {
             if (ice.candidate) {
                 handleCandidate(ice.candidate.candidate);
             }
         };
         //建立一个伪数据的通道
         pc.createDataChannel('');
         pc.createOffer((res) => {
             pc.setLocalDescription(res);
         }, () => {});
 
         //延迟,让一切都能完成
         setTimeout(() => {
             let lines = pc.localDescription.sdp.split('\n');
             lines.forEach(item => {
                 if (item.indexOf('a=candidate:') === 0) {
                     handleCandidate(item);
                 }
             })
         }, 1000);
     }
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值