php 如何得到准确的客户端ip

来源:百度知道 编辑:UC知道 时间:2024/06/06 23:16:31
在网上找了很多,都只能得到一个错的ip,有的甚至错得离谱。
如下面一段代码:
<?
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 GetIP();
?>
我的本机ip应该是:222.51

print $_SERVER['HTTP_X_FORWARDED_FOR']; 看看

应该是用了铁通,然后铁通路由转发的,不过,HTTP_X_FORWARDED_FOR是可以在header头里伪造的

if($_SERVER['HTTP_X_FORWARDED_FOR']){
$onlineip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$c_agentip=1;
} elseif($_SERVER['HTTP_CLIENT_IP']){
$onlineip = $_SERVER['HTTP_CLIENT_IP'];
$c_agentip=1;
} else{
$onlineip = $_SERVER['REMOTE_ADDR'];
$c_agentip=0;
}
$onlineip = preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/',$onlineip) ? $onlineip : 'Unknown';

$ip = $_SERVER['REMOTE_ADDR'];
参考资料:http://www.digooo.com