如何使用某些php函数获取代理ip


How to get proxy ip with some php function?

我有两个vps,在我的vps_ip1上构建sshd并在本地机器上的Firefox中安装自动代理插件,将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,我用ssh连接vps_ip1并启动自动代理,什么时候在Firefox中输入some_domain/read.php,得到闪光输出:

vps_ip1
1426332103

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

您需要阅读代理以及它们可以以何种方式运行。特别是阅读有关匿名代理的部分。

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

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

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

因此,现在您需要检查安装在vps_ip1上的代理服务器并禁用匿名功能。

   <?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;
   ?>

你必须使用命令查看$_SERVER数组的内容

 print_r($_SERVER);

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

根据您的代理服务器,它可以是以下任何一种可能性:HTTP_X_FORWARDEDHTTP_X_FORWARDEDHTTP_FORWARDED_FORHTTP_FORWARDEDHTTP_CLIENT_IPHTTP_FORWARDED或其他任何东西。

有关检索 IP 的快速方法,请参阅以下问题:在 PHP 中检索用户正确 IP 地址的最准确方法是什么?