如何使用PHP获取用户的真实IP?

10 浏览
0 Comments

如何使用PHP获取用户的真实IP?

这个问题已经有答案了:

如何在PHP中获取客户端的IP地址

我一直在尝试获取用户的真实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    .

有没有办法像whatismyip.com一样获取真实的IP地址(它会告诉真实的IP地址、代理地址和用户代理)?

更新:whatismyip告诉我

\"你的IP地址是:[我的真实IP]

代理:[我的代理地址]

城市:Alipur

州/地区:德里

国家:IN -

ISP:Bharti Airtel Ltd.\"

为什么它能准确地获取所有细节,而我的PHP脚本却不能呢?

admin 更改状态以发布 2023年5月23日
0
0 Comments

你可以试试这个...


0
0 Comments

你可以这样做

$ip= isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
     $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];

但即使如此也不能100%确定真实用户的IP。现今有太多的NAT防火墙以及代理服务器,获取真实用户的IP并不保证。

编辑

回答你的编辑问题,关于如何获得更多的请求详情,可以使用语言的许多特性。例如尝试

print_r(getallheaders());

接下来,你还可以使用

 print_r($_SERVER);

并从中提取所需的信息。

编辑2

即使你喜欢的whatismyip.com也报告了

使用我们的IP查找工具可以找到您的IP位置。由于许多不同的因素,没有IP查找工具是100%准确的。其中一些因素包括IP所有者注册的位置,控制IP的机构所在的位置,代理服务器,移动设备IP等。如果您在美国而IP的控制机构在加拿大,那么IP地址查找结果可能会显示为加拿大。在美国的黑莓用户在Verizon网络上,显示加拿大IP非常常见。

参考资料

你可能还会问,那么为什么我至少不能获得他们展示的内容?我相信他们在设置该工具时投入了很多研究和资源,这不是一个单一的PHP代码,事实上,无法确定该网站是否完全采用PHP编写。进行更多的研究,你就可以尝试匹配他们的查找工具。

0