如何使用一些PHP函数获取代理ip?

时间:2015-03-14 11:35:04

标签: php

我有两个vps,在我的vps_ip1上构建sshd并在本地机器上的firefox中安装autoproxy插件,将some_domain与vps_ip2绑定,并将read.php放在vps_ip2上。

<?php
echo  $_SERVER['REMOTE_ADDR'];
echo  "<br>";
echo  $_SERVER['REQUEST_TIME'];
echo  "<br>";
echo  $_SERVER['HTTP_X_FORWARDED_FOR'];
echo  "<br>";
echo  $_SERVER['HTTP_CLIENT_IP'];
?>  

现在我的本地ip是ip0,我用vsh连接vps_ip1并启动autoproxy,何时在firefox中输入some_domain/read.php以获得fllowing输出:

vps_ip1
1426332103

$_SERVER['HTTP_X_FORWARDED_FOR']$_SERVER['HTTP_CLIENT_IP']对我的ip0一无所知 如何使用一些php函数获取我的本地ip0?

3 个答案:

答案 0 :(得分:1)

您需要阅读proxies以及它们可以以何种方式运作。特别是阅读关于anonymous proxies的部分。

简而言之,根据代理服务器的配置,它可能不会提供原始IP,以保护客户端的匿名性。

HTTP_X_FORWARDED_FOR只保存代理服务器自愿提供的任何数据。它可能没什么。它可能是客户的公共IP。它可能是客户端的本地(lan)IP。它可能是以逗号分隔的先前/链接代理列表,包含或不包含客户端。它甚至可能是任何欺骗性的ip。(

最后,不能只信任任何代理服务器及其在HTTP_X_FORWARDED_FOR标头中提供的内容,或者即使它为您提供了任何内容。

所以现在你需要检查你在vps_ip1上安装的代理服务器并禁用匿名功能。

答案 1 :(得分:0)

   <?php
   if (!empty($_SERVER["HTTP_CLIENT_IP"]))
   {
    //check for ip from share internet
    $ip = $_SERVER["HTTP_CLIENT_IP"];
   }
   elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
   {
    // Check for the Proxy User
    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
   }
   else
   {
    $ip = $_SERVER["REMOTE_ADDR"];
   }

   // This will print user's real IP Address
   // does't matter if user using proxy or not.
   echo $ip;

   ?>

答案 2 :(得分:0)

您必须使用命令

查看$_SERVER数组的内容
 print_r($_SERVER);

并找到哪个变量使用您的代理来传输您的本地IP。

根据您的代理服务器,它可以是以下任何一种可能性:HTTP_X_FORWARDEDHTTP_X_FORWARDEDHTTP_FORWARDED_FORHTTP_FORWARDEDHTTP_CLIENT_IP,{ {1}},或其他任何内容。

有关检索IP的快速方法,请参阅以下问题: What is the most accurate way to retrieve a user's correct IP address in PHP?