【问题标题】:JavaScript: How to get users IP ADDRESS?JavaScript:如何获取用户 IP 地址?
【发布时间】:2010-11-06 00:08:13
【问题描述】:

是否可以仅使用 JavaScript 来获取用户的 IP 地址?如果有,怎么做?

【问题讨论】:

标签: javascript ip-address


【解决方案1】:

我不这么认为。您需要使用服务器端语言。或者找一个服务,也许你可以使用 AJAX,但我不确定是否存在。

【讨论】:

    【解决方案2】:

    我自己实际上一直在玩弄这个。如果用户使用带有 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>
    

    【讨论】:

      【解决方案3】:

      没有。它是严格的客户端,因此它将使用一些辅助技术来查找 IP 地址。

      谷歌搜索提供了许多选项。

      【讨论】:

      • 你介意举一个这个辅助服务的例子。此外,这将如何工作,因为这意味着 my 网络服务器将转发请求......所以辅助服务将简单地返回我的网络服务器的 IP 地址,而不是客户端浏览器跨度>
      • 我实际上说的是“辅助技术”,例如 PHP 或 .NET,它们将在您的服务器上运行。您的问题专门询问您是否只能使用 javascript,而您不能。您需要有一个服务器端脚本为您提供该信息。如果您使用的是 Prototype 或 jQuery,那么您可以轻松执行 AJAX 请求并返回您想要的值。有关更多信息,我建议上面的任何相关 SO 问题或参考javascript.about.com/library/blip.htm,其中概述了如何使用 Java、PHP、ASP、.NET 和 CF 进行操作
      【解决方案4】:

      使用那些告诉您请求者 IP 地址的在线服务之一怎么样?我只在 html 视图的上下文中看到过它们。但我的想法是你提出一些请求,响应将包含 ip 信息(以某种粗略的方式)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-27
        • 2011-02-06
        • 2012-06-12
        • 2012-03-14
        • 2012-02-16
        • 2011-03-17
        • 1970-01-01
        • 2011-06-02
        相关资源
        最近更新 更多