将假/本地IP地址设置为PHP$\u服务器变量

将假/本地IP地址设置为PHP$\u服务器变量,php,Php,我在我的PHP站点上使用以下函数来获取访问者的IP function getClientIP(){ if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){ return $_SERVER["HTTP_X_FORWARDED_FOR"]; }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER["R

我在我的PHP站点上使用以下函数来获取访问者的IP

function getClientIP(){       
 if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){
        return  $_SERVER["HTTP_X_FORWARDED_FOR"];  
 }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { 
        return $_SERVER["REMOTE_ADDR"]; 
 }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
        return $_SERVER["HTTP_CLIENT_IP"]; 
 } 

 return '';}
由于我之前没有对IP地址使用任何筛选器或验证, 几天前,在我们的IP地址列中,我收到了一些随机字符串(例如,
$IP_array
),而不是一个有效的IP地址。 我认为这个请求是用PHP脚本发送的, 我尝试了几种方法来欺骗我自己的站点的IP,但每次都是我的原始IP或IP分配的VPN 如何获得字符串而不是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 IP address [Ex: 192.168.1.150]


?>


你能提供更多这些“随机字符串”的例子吗另一个是{$rand_IP_list}看样子你可以这么做:显然他们没有正确设置变量
curl--header“X-Forwarded-For:$fake_-IP”http://www.example.com“
谢谢@chris85,我知道了,谢谢史密斯的澄清,使用HTTP_X_FORWARDED_FOR对我来说是强制性的,以防止某些应用程序用户出现随机IP问题,例如:opera mini、ucweb、puffin。所有这些浏览器都在使用压缩技术,每次使用应用程序时都将随机IP分配给所有用户,为了获得他们的真实IP,我在顶部使用HTTP_FORWARDED_。有没有其他方法可以防止这种欺骗?或者我们必须为那些浏览器之外的所有人使用$\u SERVER[“REMOTE\u ADDR”],如果有人也更改了UA,我们将再次遇到问题