gpt4 book ai didi

javascript - 获取用户IP地址的 native javascript方法

转载 作者:行者123 更新时间:2023-11-29 18:04:30 27 4
gpt4 key购买 nike

如果不重复使用外部服务或服务器端代码,似乎不可能使用纯 javascript 获取您的 IP 地址。

我的问题是:为什么语言没有在本地实现这个特性?毕竟,浏览器应该知道“它的”IP 地址。

最佳答案

您实际上可以使用普通 JavaScript 获取用户的 IP 地址。 WebRTC 有一个安全漏洞(读作:功能),可以获取用户的外部甚至内部 (LAN) IP 地址。

看看这个 GitHub 项目:https://github.com/diafygi/webrtc-ips

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

查看演示:https://diafygi.github.io/webrtc-ips/

关于javascript - 获取用户IP地址的 native javascript方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com