Publié le 14/06/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Connaitre l'adresse IP reelle d'un visiteur

Pour sécuriser un site, bloquer une plage d'IP ou établir des statistiques de visites, la première étape est de trouver l'adresse IP du visiteur. Le tableau $_SERVER contient toutes les valeurs importantes de la requęte en cours, le plus souvent REMOTE_ADDR renvoie la bonne IP.

Récuperer l'ip du visiteur

La fonction getRealIPAddress() renvoie l'adresse IP la plus sécurisée pour le visiteur en cours. Il n'existe pas de certitude ou de risque nul, si l'utilisateur passe par un proxy anonyme, on obtient l'adresse IP du proxy, aucune information sur le visiteur réel ne peut être trouvée.

/**
 * Vérifier la validité d'une adresse IP, une adresse locale est incorrecte
 * @param string adresse IP
 * @return boolean validité d'une adresse IP
 */
function is_ValidIP($ip) {
    if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE)) {
        return true;
    }
    else {
        return false;
    }
}
 
/**
 * Retrouver l'adresse IP du visiteur, test d'un partage de connection, d'un proxy
 * @return String l'adresse IP la + sure
 */
function getRealIPAddress() {
//Connection internet partagée ou ISP IP
    if (!empty($_SERVER['HTTP_CLIENT_IP']) && is_ValidIP($_SERVER['HTTP_CLIENT_IP'])) {
        return $_SERVER['HTTP_CLIENT_IP'];
    }
 
//Connection derrière un routeur
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
//Extraire la première adresse valide
        $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        foreach ($iplist as $ip) {
            if (is_ValidIP($ip)) {
                return $ip;
            }
        }
    }
 
//Trouver le proxy utlisé
    if (!empty($_SERVER['HTTP_X_FORWARDED']) && is_ValidIP($_SERVER['HTTP_X_FORWARDED'])) {       
        return $_SERVER['HTTP_X_FORWARDED'];
    }
    if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && is_ValidIP($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) {
        return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    }
    if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && is_ValidIP($_SERVER['HTTP_FORWARDED_FOR'])) {
        return $_SERVER['HTTP_FORWARDED_FOR'];
    }
    if (!empty($_SERVER['HTTP_FORWARDED']) && is_ValidIPp($_SERVER['HTTP_FORWARDED'])) {
        return $_SERVER['HTTP_FORWARDED'];
    }
 
//L'adresse IP par défaut
    return $_SERVER['REMOTE_ADDR'];
}

Lorsque l'adresse IP contenu dans $_SERVER['REMOTE_ADDR'] est différence de l'adresse trouvée par la fonction getRealIPAddress(), la connexion internet passe par une passerelle. Dans ce cas, il peut s'agir d'un proxy, d'un VPN ou d'un autre routeur.
Attention, ce n'est pas la peine de s'alarmer et de craindre une faille de sécurité. L'usage d'un proxy est aussi une pratique courante, par exemple dans le cadre d'une connexion par appareil mobile.
Pour tester son identité sur internet, je vous conseille de passer par l'outil Mon Adresse IP qui en plus de la connexion effectue des tests sur le navigateur internet et l'ordinateur.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - script
Mise a jour
14/06/2010
Visualisation
vu 3446 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Amal dans tuto

pour moi j'ai créé une liste déroulante en liaisant avec la base de donnée déja existant mais la valeur sélectionné ne peut pas etre afficher jamais et...

Publié par Marcos dans java

Bon travail , mais il a quelque chose d'etrange ! Je devais faire l'interface publique de classe avec des variables de position separees Position NORMAL = null; Position RIGHT = null; et posit...

Publié par titi dans tuto

test de ce truc! eh ben exigeant en plus

Publié par roundge dans php5

Bien ! Merci pour cette petite classe en php bien pratique !
J'avais 2000 photos libres de droits à télécharger sur un site, dans un dossier ou les fichiers ne sont pas list&e...

Publié par Deepan dans php5

Bonjour,
Merci pour ce tuto qui m'a bien aide.
Je donne ici les modifications apportees pour que cela fonctionne chez moi.

/****************************************
* Ouvrir u...