如何使用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日
你可以这样做
$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编写。进行更多的研究,你就可以尝试匹配他们的查找工具。