为什么有时无法读取ip地址,这个功能

时间:2011-11-04 13:03:52

标签: php javascript ajax ip ip-address

我正在使用此功能获取我网站中用户的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);
}

非常感谢。

4 个答案:

答案 0 :(得分:2)

通常只有echo $_SERVER['REMOTE_ADDR'];才能完成这项工作。否则,请解释一下我们的意思,“它有时候无法读取ipaddress”

答案 1 :(得分:0)

IP地址不是禁止用户的可靠方式,因为它们可以使用代理,或者可以拥有动态IP。例如,对于某些用户而言,禁止IP只意味着他们必须重新启动路由器,他们才能再次访问您的网站。

根据您的网站,拒绝某人访问的更好方法是使用用户身份验证(用户登录)。

答案 2 :(得分:0)

简短的回答是,没有100%保证获取用户IP地址的方式 - $_SERVER['REMOTE_ADDR']是您最好的选择,但即使这样也不是100%可靠 - 特别是对于网络上的用户。

从客户端通过HTTP传递的任何都可能被阻止/欺骗。

以相反的方式解决问题更容易 - 白名单访问更容易(也更安全)而不是将其列入黑名单 - 如果你可以这样做,我会去做。它只需要像简单的(在Apache .htaccess或vhost配置中):

Deny from all
Allow from mydomain.com

答案 3 :(得分:0)

您可以从环境中获得的唯一IP地址是REMOTE_ADDR一个 代码中的其他愚蠢字符串不过是HTTP标头,可选的。可伪造,省略,格式错误,空白等。

我给你一个结论。