美文网首页
JS获取本地IP地址

JS获取本地IP地址

作者: 大码猴 | 来源:发表于2023-05-22 09:17 被阅读0次

    最近一个内网项目要求web端数据请求时传输本地IP地址给服务端,找了各种方法都不行,基本都是老方法或者JS不兼容。这是参照别人方法弄了个,亲测可行。
    当然要是能连外网的方法就很多了,各厂商的免费http框架都行。

    // main.js
     getUserIP((ip) => { 
        console.log("ipppp === ",ip)
      //ipppp ===  121.90.11.160
     })
    
    function getUserIP(callback) {
        var ip_dups = {};
        var RTCPeerConnection = window.RTCPeerConnection
            || window.mozRTCPeerConnection
            || window.webkitRTCPeerConnection;
        var useWebKit = !!window.webkitRTCPeerConnection;
        var mediaConstraints = {
            optional: [{RtpDataChannels: true}]
        };
        var servers = {
            iceServers: [
                {urls: "stun:stun.services.mozilla.com"}, 
                {urls: "stun:stun.l.google.com:19302"},
            ]
        };
        var pc = new RTCPeerConnection(servers, mediaConstraints);
        function handleCandidate(candidate){
            var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
            var hasIp = ip_regex.exec(candidate)
            if (hasIp) {
                var ip_addr = ip_regex.exec(candidate)[1];
                if(ip_dups[ip_addr] === undefined)
                    callback(ip_addr);
                ip_dups[ip_addr] = true;
            }
        }
        pc.onicecandidate = function(ice){
            if(ice.candidate) {
                handleCandidate(ice.candidate.candidate);
            }   
        };
        pc.createDataChannel("");
        pc.createOffer(function(result){
          pc.setLocalDescription(result, function(){}, function(){});
        }, function(){});
        setTimeout(function(){
            var lines = pc.localDescription.sdp.split('\n');
            lines.forEach(function(line){
                if(line.indexOf('a=candidate:') === 0)
                    handleCandidate(line);
            });
        }, 1000);
    }
    

    相关文章

      网友评论

          本文标题:JS获取本地IP地址

          本文链接:https://www.haomeiwen.com/subject/ecnzsdtx.html