【问题标题】:How to detect the visitor's IP address using HTML? [closed]如何使用 HTML 检测访问者的 IP 地址? [关闭]
【发布时间】:2011-12-31 10:40:51
【问题描述】:

如何使用 HTML 为我的网站检测访问者 IP 地址? 我有一个contactform.html 和一个formsent.html。 当 formsent.html 将联系信息发送到我的电子邮件时,我还想查看他们的 IP 地址!

【问题讨论】:

  • 您无法从 HTML(或 JavaScript)中获得此信息。您可以从处理 contactform.html 的脚本中获取它。

标签: html web ip-address


【解决方案1】:

你不能通过 HTML 来做到这一点。但是,您可以通过 PHP 找到访问者的 IP 地址。

$ip=$_SERVER['REMOTE_ADDR'];

【讨论】:

    【解决方案2】:

    $ip=$_SERVER['REMOTE_ADDR'];

    此命令显示服务器 ip 地址而不是用户本地 ip 地址,因为这是 php 命令符合服务器中的代码,因此此命令显示服务器 ip 地址

    【讨论】:

      【解决方案3】:

      以下脚本可能对您有用。您可以复制并保存为{whateveryouwant}.php

      <?php
      
      echo "Your IP is";
      
      echo $_SERVER["REMOTE_ADDR"];
      
      function get_ip_address() {
        // check for shared internet/ISP IP
        if (!empty($_SERVER['HTTP_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_CLIENT_IP']))
         return $_SERVER['HTTP_CLIENT_IP'];
      
        // check for IPs passing through proxies
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
         // check if multiple ips exist in var
          $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
          foreach ($iplist as $ip) {
           if ($this->validate_ip($ip))
            return $ip;
          }
         }
      
        if (!empty($_SERVER['HTTP_X_FORWARDED']) && $this->validate_ip($_SERVER['HTTP_X_FORWARDED']))
         return $_SERVER['HTTP_X_FORWARDED'];
        if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
         return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
        if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && $this->validate_ip($_SERVER['HTTP_FORWARDED_FOR']))
         return $_SERVER['HTTP_FORWARDED_FOR'];
        if (!empty($_SERVER['HTTP_FORWARDED']) && $this->validate_ip($_SERVER['HTTP_FORWARDED']))
         return $_SERVER['HTTP_FORWARDED'];
      
        // return unreliable ip since all else failed
         return $_SERVER['REMOTE_ADDR'];
       }
      
      function validate_ip($ip) {
           if (filter_var($ip, FILTER_VALIDATE_IP, 
                               FILTER_FLAG_IPV4 | 
                               FILTER_FLAG_IPV6 |
                               FILTER_FLAG_NO_PRIV_RANGE | 
                               FILTER_FLAG_NO_RES_RANGE) === false)
               return false;
           self::$ip = $ip;
           return true;
       }
      ?>
      

      【讨论】:

        【解决方案4】:

        你不能。

        HTML 是一种标记语言,而不是一种编程语言。它不“做”任何事情——它只是构建内容。

        您需要使用一种编程语言,例如 PHP、ASP 等。

        【讨论】:

        • 我如何在 PHP 中使用它?
        • @LukeyBoyIsXen 使用 $_SERVER['REMOTE_HOST']
        【解决方案5】:

        你不能,不能只通过 HTML。

        您需要使用具有可用 HTTP 标头的脚本。

        使用 JSONP 查看this SO answer

        对于 PHP,您可以使用 $_SERVER['REMOTE_HOST']

        【讨论】:

          【解决方案6】:

          HTML 是一种标记语言,所以它没有任何变量。

          如果你想使用 PHP 来获取它,你需要使用 $_SERVER 超全局变量。解决方案可能是:

          echo $_SERVER["REMOTE_ADDR"];
          

          这实际上获取了主机 ip,这将是您的服务器。

          回显 $_SERVER["REMOTE_ADDR"];

          然而,这是最基本的,如果用户在代理后面,并且允许他们简单地更改它,则会失败。一个更好的方法是使用类似的东西:

          function get_ip_address() {
            // check for shared internet/ISP IP
            if (!empty($_SERVER['HTTP_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_CLIENT_IP']))
             return $_SERVER['HTTP_CLIENT_IP'];
          
            // check for IPs passing through proxies
            if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
             // check if multiple ips exist in var
              $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
              foreach ($iplist as $ip) {
               if ($this->validate_ip($ip))
                return $ip;
              }
             }
          
            if (!empty($_SERVER['HTTP_X_FORWARDED']) && $this->validate_ip($_SERVER['HTTP_X_FORWARDED']))
             return $_SERVER['HTTP_X_FORWARDED'];
            if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
             return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
            if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && $this->validate_ip($_SERVER['HTTP_FORWARDED_FOR']))
             return $_SERVER['HTTP_FORWARDED_FOR'];
            if (!empty($_SERVER['HTTP_FORWARDED']) && $this->validate_ip($_SERVER['HTTP_FORWARDED']))
             return $_SERVER['HTTP_FORWARDED'];
          
            // return unreliable ip since all else failed
            return $_SERVER['REMOTE_ADDR'];
           }
          
          function validate_ip($ip) {
               if (filter_var($ip, FILTER_VALIDATE_IP, 
                                   FILTER_FLAG_IPV4 | 
                                   FILTER_FLAG_IPV6 |
                                   FILTER_FLAG_NO_PRIV_RANGE | 
                                   FILTER_FLAG_NO_RES_RANGE) === false)
                   return false;
               self::$ip = $ip;
               return true;
           }
          

          (http://stackoverflow.com/questions/1634782/what-is-the-most-accurate-way-to-retrieve-a-users-correct-ip-address-in-php)

          这会正确解析 HTTP_X_FORWARDED_FOR 字段并验证 IP 以确保其格式正确,而不是在私有块中。

          【讨论】:

          • 这也涵盖了用户可以轻易欺骗其地址的可能性。此外,REMOTE_ADDR 将始终设置,因此从不使用其余部分。
          • 你是对的。我已经改变了它,以便它首先检查转发,然后检查其他。事实上,这整个答案都是废话。我正在重写它以使其更好。
          • 对大多数用户来说应该是一样的,但是会区分代理后面的用户,而不是把代理IP放在那里。这意味着如果您被 IP 屏蔽,您不会意外屏蔽整个公司。
          • 但是$ip之前的价值是什么,现在是什么?
          • 好的,已经删除了错误的}。再试一次!
          【解决方案7】:

          如果您可以使用 JQuery 但无法访问 PHP,Ipify 可能会很有用。它是免费的,请求数量没有限制

          <script type="application/javascript">
            function getIP(json) {
              document.write("My public IP address is: ", json.ip);
            }
          </script>
          
          <script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

          【讨论】:

            猜你喜欢
            • 2011-12-17
            • 2020-12-12
            • 1970-01-01
            • 1970-01-01
            • 2021-11-15
            • 2021-09-26
            • 2011-01-31
            • 1970-01-01
            • 2011-04-15
            相关资源
            最近更新 更多