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

时间:2013-01-09 17:11:10

标签: http

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

2 个答案:

答案 0 :(得分:0)

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

如果您控制代理,您可以将其设置为在标题中可靠地报告原始IP地址,但不能保证其他人会这样做。

由于隐藏拓扑的能力在HTTP中是有意的,因此您必须采用“恶意”做法,例如签名的applet,activeX控件或其他执行方法,安全性不高。

答案 1 :(得分:0)

以下是获取准确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;
                }
            }
        }
    }
}

它工作得很好..