我使用下面的代码来获取用户的真实IP地址。
function getUserIP () {
if (getenv('HTTP_CLIENT_IP')) {
$ip = getenv('HTTP_CLIENT_IP');
}
elseif (getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_X_FORWARDED')) {
$ip = getenv('HTTP_X_FORWARDED');
}
elseif (getenv('HTTP_FORWARDED_FOR')) {
$ip = getenv('HTTP_FORWARDED_FOR');
}
elseif (getenv('HTTP_FORWARDED')) {
$ip = getenv('HTTP_FORWARDED');
}
else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$userIP = getUserIP();
有时候我知道IP地址是67.143.220.112, 67.142.171.26
。
这是用户的正确IP地址还是我必须做其他事情来获取用户的真实IP地址?
答案 0 :(得分:4)
$_SERVER['REMOTE_ADDR'];
提供用户的IP地址。
答案 1 :(得分:2)
获取用户IP地址的完美方法。
<?PHP
function getUserIP()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
echo $user_ip; // Output User IP address [Ex: 177.87.193.134]
?>
答案 2 :(得分:1)
您可以获得的唯一100%可靠地址是$_SERVER['REMOTE_ADDR']
。其他标题是可选的,并不总是存在,并且只是伪造的,因为它们只是信息性的。
如果用户位于一个或多个代理和/或NAT网关后面,即使是REMOTE_ADDR也是错误的。简而言之,无论代理/ NAT如何,都没有完全识别用户真实IP地址的简单方法。