我使用这个函数来获取用户的ip地址在我的网站,但它不能读取ipaddress有时。我不知道用户是否可以隐藏ipaddress ?如果用户能够这样做,那么我如何获得ipaddress或任何其他解决方案来识别用户的本地计算机,以便我可以阻止该计算机打开我的网站。
如有任何建议,不胜感激。
function GetIP()
{
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}
通常只有echo $_SERVER['REMOTE_ADDR'];
应该做这项工作。否则,请解释一下"it cannot read ipaddress sometimes"是什么意思
Ip地址不是禁止用户的可靠方法,因为他们可以使用代理,或者可以使用动态Ip。例如,对一些用户来说,禁止IP只意味着他们必须重新启动路由器,他们可以再次访问你的网站。
根据您的站点,拒绝某人访问的更好方法是使用用户身份验证(用户登录)
简短的回答是没有100%保证获得用户IP地址的方法- $_SERVER['REMOTE_ADDR']
是您最好的选择,但即使这样也不是100%可靠-特别是对于网络上的用户。
任何从客户端通过HTTP传递的内容都可能被阻止/欺骗。
用另一种方法解决你的问题更容易——将访问列入白名单比将其列入黑名单更容易(也更安全)——如果你能这样做,我会选择它。它只需要一些简单的东西(在Apache .htaccess或vhost配置中):
Deny from all
Allow from mydomain.com
您可以从环境中获得的唯一IP地址是REMOTE_ADDR
。
代码中其他愚蠢的字符串只不过是HTTP头,可选的。可以伪造,省略,格式错误,为空等