Get local and public IP addresses in JavaScript

from:https://github.com/diafygi/webrtc-ips 

Firefox 跟 Chrome支持WebRTC可以向STUN服務器請求,返回內外網IP,不同於XMLHttpRequest請求,STUN請求開發者工具當中看不到網絡請求的。 

//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 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(){}); 
} 

//Test: Print the IP addresses into the console 
getIPs(function(ip){console.log(ip);});


本地測試了一下,掛上***的效果…… 

6413C58F-9CD2-4DC7-B9DE-6B387F8FA38A.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章