108 votes

Comment obtenir l'IP réelle d'un visiteur ?

J'utilise ce code PHP pour obtenir l'adresse IP d'un visiteur :

<?php echo $_SERVER['REMOTE_ADDR']; ?>

Mais, je ne peux pas obtenir l'adresse IP réelle des visiteurs. lorsqu'ils utilisent un proxy . Existe-t-il un moyen d'obtenir l'adresse IP d'un visiteur dans ce cas ?

201voto

Essayez ce code php.

<?PHP

function getUserIP()
{
    // Get real visitor IP behind CloudFlare network
    if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
              $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
              $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
    }
    $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: 177.87.193.134]

?>

57voto

Teneff Points 6753

C'est la technique la plus courante que j'ai vue :

function getUserIP() {
    if( array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) ) {
        if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',')>0) {
            $addr = explode(",",$_SERVER['HTTP_X_FORWARDED_FOR']);
            return trim($addr[0]);
        } else {
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
    }
    else {
        return $_SERVER['REMOTE_ADDR'];
    }
}

Notez que cela ne garantit pas que vous obtiendrez toujours l'IP correcte de l'utilisateur car il existe de nombreuses façons de la cacher.

17voto

El cero Points 559

Voici mon approche :

 function getRealUserIp(){
    switch(true){
      case (!empty($_SERVER['HTTP_X_REAL_IP'])) : return $_SERVER['HTTP_X_REAL_IP'];
      case (!empty($_SERVER['HTTP_CLIENT_IP'])) : return $_SERVER['HTTP_CLIENT_IP'];
      case (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) : return $_SERVER['HTTP_X_FORWARDED_FOR'];
      default : return $_SERVER['REMOTE_ADDR'];
    }
 }

Comment l'utiliser :

$ip = getRealUserIp();

6voto

Halcyon Points 31203

Les mandataires peuvent envoyer un HTTP_X_FORWARDED_FOR mais même cela est facultatif.

N'oubliez pas non plus que les visiteurs peuvent partager des adresses IP ; les réseaux universitaires, les grandes entreprises et les fournisseurs d'accès Internet du tiers-monde ou à bas prix ont tendance à partager les adresses IP entre de nombreux utilisateurs.

4voto

Yogesh Prajapati Points 251

Appliquer ce code pour obtenir l'adresse IP :

    if (getenv('HTTP_X_FORWARDED_FOR')) { $pipaddress = getenv('HTTP_X_FORWARDED_FOR');
 $ipaddress = getenv('REMOTE_ADDR'); 
    echo "Your Proxy IP address is : ".$pipaddress. "(via $ipaddress)" ; } 
    else { $ipaddress = getenv('REMOTE_ADDR'); echo "Your IP address is : $ipaddress"; }
    ------------------------------------------------------------------------

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X