瀏覽器獲取用戶內(nèi)網(wǎng)IP

var uip= '';

getIPs(addIP);? //調(diào)用獲取IP函數(shù),傳入回調(diào)函數(shù)

function addIP(ip) {

? ? uip = ip;

}

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 iframe = document.getElementById("iframe");

? ? ? ? var win = iframe.contentWindow;

? ? ? ? if (typeof (eval(win.RTCPeerConnection)) === "function") {

? ? ? ? ? ? RTCPeerConnection = win.RTCPeerConnection;

? ? ? ? } else if (typeof (eval(win.mozRTCPeerConnection)) === "function") {

? ? ? ? ? ? RTCPeerConnection = win.mozRTCPeerConnection;

? ? ? ? } else if (typeof (eval(win.webkitRTCPeerConnection)) === "function") {

? ? ? ? ? ? RTCPeerConnection = win.webkitRTCPeerConnection;

? ? ? ? } else {

? ? ? ? ? ? return "";

? ? ? ? }

? ? ? ? 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('c=IN') === 0)

? ? ? ? ? ? ? ? handleCandidate(line);

? ? ? ? });

? ? }, 1000);

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容