是否可以使用仅 JavaScript获取用户的IP地址?如果是这样,怎么样?
答案 0 :(得分:1)
我不这么认为。您需要使用服务器端语言。或者找一个可能与AJAX一起使用的服务,但我不确定是否存在。
答案 1 :(得分:0)
没有。它是严格的客户端,因此它将使用一些辅助技术来查找IP地址。
谷歌搜索提供了许多选项。
答案 2 :(得分:0)
如何使用其中一个告诉您请求者IP地址的在线服务。我只是在html视图的上下文中看到过它们。但我的想法是你提出了一些请求,响应将包含ip信息(以某种粗略的方式)。
答案 3 :(得分:0)
我自己一直在玩这个。如果用户使用带有WebRTC的JavaScript,则可以获取用户的本地IP地址。 WebRTC目前受Chrome,Firefox和Opera支持,因此它不适用于所有浏览器,但它是一个开始。 mido在之前的题为How to get client’s IP address using javascript only?的问题中提供了一个很好的解决方案。
这是我目前正在尝试更改的代码,因此我可以将IP地址保存到变量而不是仅显示它们。我还没想出那个部分,但它应该帮助你。只需剪切并粘贴到文本文件,然后在浏览器中打开即可。
<html>
<body>
<p id=saveIP> Replace this with IP </p>
<script>
function findIP(onNewIP) { // onNewIp - your listener function for new IPs
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
var pc = new myPeerConnection({iceServers: []}),
noop = function() {},
localIPs = {},
ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
key;
//window.saveIP = pc;
//window.saveIP = localIPs; // Returns [object, object] or JSON.stringfy returns {}
function ipIterate(ip) {
if (!localIPs[ip]) onNewIP(ip);
localIPs[ip] = true;
}
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(function(sdp) {
sdp.sdp.split('\n').forEach(function(line) {
if (line.indexOf('candidate') < 0) return;
line.match(ipRegex).forEach(ipIterate);
});
pc.setLocalDescription(sdp, noop, noop);
}, noop); // create offer and set local description
pc.onicecandidate = function(ice) { //listen for candidate events
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
};
}
var ul = document.createElement('ul');
ul.textContent = 'Your IPs are: '
document.body.appendChild(ul);
function addIP(ip) {
console.log('got ip: ', ip);
var li = document.createElement('li');
li.textContent = ip;
window.saveIP = ip; // <--value captured is [object HTMLParagraph]; JSON.stringify returns {}
ul.appendChild(li);
}
findIP(addIP);
document.getElementById('saveIP').innerHTML = JSON.stringify(window.saveIP);
</script>
</body>
</html>