即使他们使用像hidemyass.com这样的代理网站,我也想从我网站上的用户那里获得真实的IP地址
这是我的代码并认为它有效,但我测试了它,但它没有
<?php
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
?>
Run Code Online (Sandbox Code Playgroud)
我认为这段代码可行,但代理仍然绕过它.
提前致谢.
你不能.您拥有的信息来自apache/iis/whatever,它只知道谁与您的服务器通信,在这种情况下,它是代理服务器.除非代理想要在标题中发送该信息,否则您将无法获得它.
X-Forwarded-For是您可以做的最好的,但它不太可能是匿名代理发送的.
除非您在编码IP地址的应用程序层实现某种身份验证协议(这也受到欺骗行为的影响),否则您无法确定获得"真实"的IP地址.
为什么是这样?
因为IP数据包可以被访问它的"中间"的人任意重写.例如,代理,路由器,网关等.
IP数据包具有这种结构
| stuff | src ip | dst ip | stuff |
| .... | 32-bits| 32 bits | stuff |
Run Code Online (Sandbox Code Playgroud)
所以src ip - 那些只是位,记住 - 可以被任意覆盖.
http://www.faqs.org/rfcs/rfc791.html将提供更多信息.
| 归档时间: |
|
| 查看次数: |
8224 次 |
| 最近记录: |