php 中的 getenv('HTTP_X_FORWARDED_FOR') 不返回任何内容



我一直试图获得在局域网连接的计算机的客户端IP地址,如果我使用getenv('REMOTE_ADDR')或$_SERVER['REMOTE_ADDR']它返回不同的IP,它似乎得到计算机使用的浏览器的代理地址,当我尝试getenv('HTTP_X_FORWARDED_FOR')它返回什么也没有,$_SERVER['HTTP_X_FORWARDED_FOR']有一个错误,这是未定义的索引。我已经尝试了所有可能的代码,我发现在获得真正的IP地址,但没有工作。请帮助。

客户端HTTP代理的预期目的之一是隐藏组织的内部拓扑。

如果你控制代理,你可以设置它在报头中可靠地报告原始IP地址,但不能保证其他人也会这样做。

由于隐藏拓扑的能力在HTTP中是有意的,因此您必须诉诸于"邪恶"的做法,如签名applet, activeX控件或其他安全性较差的执行方法。

这里有一个更短,更干净的方法来获得准确的IP地址:

function get_ip_address(){
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true){
            foreach (explode(',', $_SERVER[$key]) as $ip){
                $ip = trim($ip); // just to be safe
                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                    return $ip;
                }
            }
        }
    }
}

最新更新