我有两个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?
答案 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_FORWARDED
,HTTP_X_FORWARDED
,HTTP_FORWARDED_FOR
,HTTP_FORWARDED
,HTTP_CLIENT_IP
,{ {1}},或其他任何内容。
有关检索IP的快速方法,请参阅以下问题: What is the most accurate way to retrieve a user's correct IP address in PHP?