如何获取客户端的本地IP地址和代理服务器


How to get Local IP address and proxy server of client

我读过很多文章,建议使用http_x_forwardd_for来获取代理服务器和客户端的真实ip地址,但似乎都不起作用。

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

此链接显示整个$_SERVER变量。

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

我该如何完成?我已经准备好使用CGI或JavaScript了。我在网上找不到任何工作实例。帮助

是否发送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是否在你的代理列表中。

我发现我写的这个小开关解决了大多数人的问题,他们很难获得真正的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;
   ?>