【发布时间】:2010-11-06 00:08:13
【问题描述】:
是否可以仅使用 JavaScript 来获取用户的 IP 地址?如果有,怎么做?
【问题讨论】:
-
这里用json解决:stackoverflow.com/questions/102605/…
标签: javascript ip-address
是否可以仅使用 JavaScript 来获取用户的 IP 地址?如果有,怎么做?
【问题讨论】:
标签: javascript ip-address
我不这么认为。您需要使用服务器端语言。或者找一个服务,也许你可以使用 AJAX,但我不确定是否存在。
【讨论】:
我自己实际上一直在玩弄这个。如果用户使用带有 WebRTC 的 JavaScript 浏览器,您可以获取用户的本地 IP 地址。目前,Chrome、Firefox 和 Opera 都支持 WebRTC,因此它并不适用于所有浏览器,但它是一个开始。 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>
【讨论】:
没有。它是严格的客户端,因此它将使用一些辅助技术来查找 IP 地址。
谷歌搜索提供了许多选项。
【讨论】:
使用那些告诉您请求者 IP 地址的在线服务之一怎么样?我只在 html 视图的上下文中看到过它们。但我的想法是你提出一些请求,响应将包含 ip 信息(以某种粗略的方式)。
【讨论】: