Angular JS中的IP白名单

时间:2017-09-15 11:16:08

标签: angularjs

我正在使用AngularJS v1.2.32。

我想为合法系统提供基于IP的白名单。我搜索过但发现使用第三方json应用程序的例子。

需要在JavaScript,angularjs中获取客户端IP并限制对其他用户的访问。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

Firefox和Chrome已实施WebRTC,允许向STUN服务器发出请求,以返回用户的本地和公共IP地址。这些请求结果可用于javascript,因此您现在可以在javascript中获取用户本地和公共IP地址。这个演示是一个示例实现。 更多

  1. https://github.com/diafygi/webrtc-ips
  2. How to get client's IP address using JavaScript only?
  3. 
    
    //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;
        var useWebKit = !!window.webkitRTCPeerConnection;
    
        //bypass naive webrtc blocking using an iframe
        if(!RTCPeerConnection){
            //NOTE: you need to have an iframe in the page right above the script tag
            //
            //<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
            //<script>...getIPs called in here...
            //
            var win = iframe.contentWindow;
            RTCPeerConnection = win.RTCPeerConnection
                || win.mozRTCPeerConnection
                || win.webkitRTCPeerConnection;
            useWebKit = !!win.webkitRTCPeerConnection;
        }
    
        //minimal requirements for data connection
        var mediaConstraints = {
            optional: [{RtpDataChannels: true}]
        };
    
        var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
    
        //construct a new RTCPeerConnection
        var pc = new RTCPeerConnection(servers, mediaConstraints);
    
        function handleCandidate(candidate){
            //match just the IP address
            var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
            var ip_addr = ip_regex.exec(candidate)[1];
    
            //remove duplicates
            if(ip_dups[ip_addr] === undefined)
                callback(ip_addr);
    
            ip_dups[ip_addr] = true;
        }
    
        //listen for candidate events
        pc.onicecandidate = function(ice){
    
            //skip non-candidate events
            if(ice.candidate)
                handleCandidate(ice.candidate.candidate);
        };
    
        //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(){});
    
        //wait for a while to let everything done
        setTimeout(function(){
            //read candidate info from local description
            var lines = pc.localDescription.sdp.split('\n');
    
            lines.forEach(function(line){
                if(line.indexOf('a=candidate:') === 0)
                    handleCandidate(line);
            });
        }, 1000);
    }
    
    //Test: Print the IP addresses into the console
    getIPs(function(ip){console.log(ip);});
    &#13;
    &#13;
    &#13;