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

时间:2013-07-12 07:23:44

标签: php javascript proxy ip cgi

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

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

LINK显示整个$ _SERVER变量。

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

我如何完成?我准备使用CGI或JavaScript。我在互联网上找不到任何有用的例子。帮助

2 个答案:

答案 0 :(得分: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是否在您的代理列表中。

答案 1 :(得分:1)

我发现我写的小开关解决了大多数人在获取真正的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;
   ?>