JavaScript:如何获得用户IP地址?

时间:2009-06-25 22:52:22

标签: javascript ip-address

是否可以使用 JavaScript获取用户的IP地址?如果是这样,怎么样?

4 个答案:

答案 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>