【问题标题】:How to get Local IP address and proxy server of client如何获取客户端的本地IP地址和代理服务器
【发布时间】:2013-07-10 16:23:29
【问题描述】:

我阅读了很多文章建议使用 http_x_forwarded_for 来获取代理服务器和客户端的真实 IP 地址,但似乎都没有工作。

我被分配了一个本地 IP 地址,我使用代理服务器连接到互联网。但是当我显示整个 $_SERVER 变量时,我使用的真机 IP 和代理服务器没有任何痕迹。

LINK 显示整个 $_SERVER 变量。

我猜这在 PHP 中是不可能的。我如何做到这一点?我知道这是可能的,因为一旦我看到一些网页显示我在 Mozilla 中使用的真实 IP 地址和代理服务器。但不确定它使用的是哪种语言。

我该如何完成?我准备好使用 CGI 或 JavaScript。我在互联网上找不到任何工作示例。帮忙?

【问题讨论】:

    标签: php javascript proxy ip cgi


    【解决方案1】:

    是否发送http_x_forwarded_for 标头完全取决于代理。有些会,有些不会。无论您在打印 $_SERVER 变量时使用的是哪个代理,都没有发送标头。

    即使所有代理都发送了标头,您仍然会遇到问题,因为任何人都可以欺骗 http_x_forwarded_for 标头,因此如果您的脚本将其视为真实 IP,那么有人可能会欺骗它以规避您的 IP 检查。

    如果使用$_SERVER['REMOTE_ADDR'] 并忘记依赖http_x_forwarded_for,您能做到的最好的事情。是的,代理用户将能够在新 IP 下访问您的网站,但这比所有用户都能够在http_x_forwarded_for 中欺骗 IP 的能力要好。

    作为帮助,您可以维护一个已知代理列表,但这最终不会给您真正的客户端 IP,它只能告诉您该 IP 是否在您的代理列表中。

    【讨论】:

    • 我明白,但如果有任何方法可以在客户端机器上运行 javascript 以从浏览器获取 IP 和代理?如果它是可能的当然!
    • 很遗憾,您可以包含一个外部脚本,但这与您的 PHP 是否依赖实际 IP 或 x_forwarded_for 存在相同的问题。另请参阅我关于保留代理列表的编辑。
    【解决方案2】:

    我发现我写的这个小开关解决了大多数难以获得真实 IP 而不是代理的问题。它检查REMOTE_ADDRHTTP_X_FORWARDED_FOR 是否相同,如果相同,则打印REMOTE_ADDR。如果它们不同,则假定HTTP_X_FORWARDED_FOR 是正确的,因为REMOTE_ADDR 通常返回代理。希望这可以帮助。请让我知道是否有更好的方法! kevin@tiger-tech.tk

      <?php 
      $ip = $_SERVER['REMOTE_ADDR'];
      $ip2 = $_SERVER['HTTP_X_FORWARDED_FOR'];
    
      switch($ip): 
      case $ip2: 
            $ipa = $_SERVER['REMOTE_ADDR'];
            $city= file_get_contents ("http://ipinfo.io/".$_SERVER['REMOTE_ADDR']."/city");
            $region= file_get_contents ("http://ipinfo.io/".$_SERVER['REMOTE_ADDR']."/region");
            $geo= file_get_contents ("http://ipinfo.io/".$_SERVER['REMOTE_ADDR']."/geo");
            break;
      default:
            $ipa = $_SERVER['HTTP_X_FORWARDED_FOR'];
            $city= file_get_contents ("http://ipinfo.io/".$_SERVER['HTTP_X_FORWARDED_FOR']."/city");
            $region= file_get_contents ("http://ipinfo.io/".$_SERVER['HTTP_X_FORWARDED_FOR']."/region");
            $geo= file_get_contents ("http://ipinfo.io/".$_SERVER['HTTP_X_FORWARDED_FOR']."/geo");
            break;
      endswitch;
       ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2012-03-14
      相关资源
      最近更新 更多