我一直试图获取用户的真实IP地址,而不是代理地址。为此,我做到了这一点:
$ip1 = $_SERVER['REMOTE_ADDR'];
$ip2 = $_SERVER['HTTP_X_FORWARDED_FOR'];
$ip3 = $_SERVER['HTTP_FORWARDED'];
mail("me@domain.com", "Report", "IP1 is $ip1, IP2 is $ip2, IP3 is $ip3 .");
但是当用户使用代理时,上面的脚本会获取代理地址而不是真实的IP地址:
IP is [proxy_addr_here], IP2 is , IP3 is .
有没有办法获得真正的IP就像whatismyip.com所说的那样(它告诉真实的IP地址,代理地址和用户)?
更新:Whatismyip告诉我这个 "您的IP地址是:[我的真实IP] 代理人:[我的代理地址] 城市:Alipur 州/地区:德里 国家:IN - ISP:Bharti Airtel Ltd."
为什么它如此准确地收集所有细节而不是我的PHP脚本?
答案 0 :(得分:2)
你可以做到
$ip= isset($_SERVER['HTTP_X_FORWARDED_FOR']) ?
$_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
但即使这不是100%。现在获取真实用户的IP并不能保证中间有这么多NAT防火墙,更不用说代理了。
修改强>
要回答关于它们如何向您显示更多信息的编辑,您可以使用该语言的许多功能来获取更多请求详细信息。例如,尝试
print_r(getallheaders());
然后你也可以使用
print_r($_SERVER);
从那里提取所需的信息。
修改2
甚至你最喜欢的whatismyip.com报道
您可以使用我们的IP查找工具找到您的IP位置。由于许多不同的因素,没有IP查找工具100%准确。其中一些因素包括知识产权所有者注册的地方,控制知识产权的机构所在地,代理商,移动电话IP等。如果您在美国且知识产权的控制机构位于加拿大,机会是IP地址查找结果将显示为加拿大。在美国,显示加拿大知识产权在Verizon网络上的黑莓用户中很常见。
<强> Reference 强>
你可能仍然会问,那么为什么我至少得不到他们所展示的内容?我确定他们已经在设置该工具方面投入了大量的研究和资源,而不是一行的PHP代码,实际上并不知道该网站是否完全用PHP编写。还有一些研究,您将尝试匹配他们的查找。
答案 1 :(得分:0)
你可以试试这个......
<?PHP
function getUserIP()
{
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'Unknown IP Address';
return $ipaddress;
}
$user_ip = getUserIP();
echo $user_ip; // Output IP address (Ex: 123.345.456.678)
?>