Comment faire pour

détecter l'IP du visiteur

L'IP du visiteur (ou du proxy qu'il utilise) peut se trouver dans plusieurs variables d'environnement.
Dans la grande majorité des cas, même pour un site comme celui-ci, il suffit d'utiliser $_SERVER["REMOTE_ADDR"].
Les autres variables sont rarement renseignées et généralement difficiles à analyser. C'est le cas pour HTTP_VIA, HTTP_X_COMING_FROM, HTTP_X_FORWARDED, HTTP_COMING_FROM, HTTP_FORWARDED_FOR et HTTP_FORWARDED.
HTTP_X_FORWARDED_FOR permet parfois d'avoir une information plus précise. Cette variable peut contenir plusieurs valeurs : unknown, une ou plusieurs IP séparées par des virgules ou des espaces.
Avant toute utilisation, il faut donc s'assurer que la valeur est exploitable.
On élimine donc toutes les IP privées :

  • 10.0.0.0 - 10.255.255.255
  • 127.0.0.0 - 127.255.255.255
  • 169.254.0.0 - 169.254.255.255
  • 172.16.0.0 - 172.31.255.255
  • 192.168.0.0 - 192.168.255.255
  • 224.0.0.0 - 239.255.255.255

Puis tout texte.


$forwarded = $_SERVER["HTTP_X_FORWARDED_FOR"];
if($forwarded)
{
$forwarded = preg_split("/,| /",$forwarded);
$forwarded = $forwarded[0];
if (preg_match("/^((10|127|22[4-9]|23[0-9])\.\d{1,3}|172\.(1[6-9]|2\d|3[0-1])|192\.168|169\.254)(\.\d{1,3}){2}$/",$forwarded)){$forwarded = "";}
if (!preg_match("/^([0-9]{1,3}(\.|$)){4}/",$forwarded) && $forwarded){$forwarded = "";}
if($forwarded){$no_ip = $forwarded;}
}
if(!$forwarded){$no_ip = $_SERVER["REMOTE_ADDR"];}
/*Résultat :
$no_ip="54.224.30.39";*/

Votre IP correspond donc à 54.224.30.39

détecter le pays d'origine du visiteur

Toutes les méthodes détaillées ci-dessous sont plus ou moins fiables.
Dans votre cas :
1. ÉTATS-UNIS 2. ÉTATS-UNIS 3. inconnu 4. inconnu 5. inconnu 6. ÉTATS-UNIS
Le plus probable : ÉTATS-UNIS (UNITED STATES)

1. Resultats fournis par hostip.info (www.hostip.info) IP Address Lookupip address lookup

Vous pouvez afficher la page sans les restrictions liées à l'hébergeur.

Pays : UNITED STATES

Ville :

Plutôt fiable avec : la plupart des grands pays.

Peu fiable avec : AOL, tele2, chello, colt, les grosses sociétés.

Service malheureusement souvent indisponible et modifié par des personnes mal intentionnées.

Code avec votre IP (54.224.30.39) :

$no_ip=$_SERVER["REMOTE_ADDR"]; /*$no_ip="54.224.30.39";*/
/*ou $no_ip=getenv("REMOTE_ADDR");*/
$hostip= "http://api.hostip.info/get_html.php?ip=$no_ip"."&position=true";
$result = file($hostip);
/*
Dans le tableau $result, on trouve :
Service indisponible ou fonction php file parfois bloquée par l'hébergeur depuis le 01/12/2008
$result[0] : UNITED STATES
$result[1] :
$result[2] :
$result[3] :
$result[4] : 1501267192
*/

2. ip-to-country

Pays : UNITED STATES

Plutôt fiable avec : la plupart des grands pays.

Peu fiable avec : AOL, tele2, chello, colt, les grosses sociétés, African Internet Numbers Registry, la zone Asie-Pacifique.

Code avec votre IP (54.224.30.39) :

`origin` est la table créée à partir du fichier d'ip-to-country

$paysdorigine="inconnu";
$no_ip=$_SERVER["REMOTE_ADDR"]; /*$no_ip="54.224.30.39";*/
/*ou $no_ip=getenv("REMOTE_ADDR");*/
$serveur=mysql_connect(host,username,password);/*Entrez ici les informations concernant votre base MySQL*/
$base=mysql_select_db(database,$serveur);
$res=mysql_query("SELECT COUNTRY_NAME FROM `origin`
WHERE inet_aton('$no_ip')>=IP_FROM AND inet_aton('$no_ip')<=IP_TO;");
$ref=mysql_fetch_row($res);
if($ref[0]){$paysdorigine=$ref[0];}
/*Résultat :
$paysdorigine="UNITED STATES"; */

Plus d'information
Comme la base de données d'IP-to-country n'est plus mise à jour, il est préférable d'utiliser celle de Maxmind.

3. Domaine

Hôte : ec2-54-224-30-39.compute-1.amazonaws.com

Pays : inconnu

Plutôt fiable avec : la plupart des pays, tele2, chello.

Inutilisable avec : les extensions .com, .net,.org ...

Code avec votre Hôte (ec2-54-224-30-39.compute-1.amazonaws.com / 54.224.30.39) :

`origin` est la table créée à partir du fichier d'ip-to-country

$serveur=mysql_connect(host,username,password);/*Entrez ici les informations concernant votre base MySQL*/
$base=mysql_select_db(database,$serveur);
$paysdorigine="inconnu";
$no_ip=$_SERVER["REMOTE_ADDR"]; /*$no_ip="54.224.30.39";*/
/*ou $no_ip=getenv("REMOTE_ADDR");*/
$hote=gethostbyaddr($no_ip); /*$hote="ec2-54-224-30-39.compute-1.amazonaws.com";*/
if ($hote!="")
 {
 $inconnuhote=explode('.',$hote);
 $inconnuextension=$inconnuhote[count($inconnuhote)-1];
 $res=mysql_query("SELECT DISTINCT COUNTRY_NAME FROM `origin` WHERE COUNTRY_CODE='$inconnuextension'");
 $ref=mysql_fetch_row($inconnures);
 if ($ref[0]){$paysdorigine=$ref[0];}
 }
/*Résultat :
$paysdorigine="inconnu"; */

4. Langage préféré

Langage préféré:

Pays : inconnu

Plutôt fiable avec : AOL, MSIE.

Peu fiable avec : les dernières versions d'Opera, Mozilla. Konqueror, navigateurs texte.

Code avec votre Langage préféré () :

`origin` est la table créée à partir du fichier d'ip-to-country

$serveur=mysql_connect(host,username,password);/*Entrez ici les informations concernant votre base MySQL*/
$base=mysql_select_db(database,$serveur);
$paysdorigine="inconnu";
$page_lang=getenv("HTTP_ACCEPT_LANGUAGE");
$page_lang=strtoupper($page_lang);
$preg="/^([A-Z]{2}-)?([A-Z]{2})/";
preg_match($preg,$page_lang,$lang);
$acceptlang=preg_replace($preg,"$2",$lang[0]);
 switch ($acceptlang)
  {
  case "EL" : $paysdorigine="GREECE";break;
  case "HE" : $paysdorigine="ISRAEL";break;
  case "SE" : $paysdorigine="SWEDEN";break;
  case "JA" : $paysdorigine="JAPAN";break;
  default : $result=mysql_query("SELECT DISTINCT `COUNTRY_NAME` FROM `origin` WHERE `COUNTRY_CODE`='$acceptlang'");
           $test=mysql_fetch_row($result);
           if ($test[0]){$paysdorigine=$test[0];}
  }
/*Résultat :
$paysdorigine="inconnu"; */

5. Langage de l'UA

User Agent : CCBot/2.0 (http://commoncrawl.org/faq/)

Pays : inconnu

Inutilisable avec : MSIE.

Code avec votre Langage de l'UA (CCBot/2.0 (http://commoncrawl.org/faq/)) :

`origin` est la table créée à partir du fichier d'ip-to-country

function getlangfromUA($string)
{
 $string=strtoupper($string);
 $preg="/(?:; |\[)(?:[A-Z]{2}-)?([A-Z]{2})(\]|; RV|\))/";
 preg_match($preg,$string,$lang);
 return $lang[1];
}
//
$serveur=mysql_connect(host,username,password);/*Entrez ici les informations concernant votre base MySQL*/
$base=mysql_select_db(database,$serveur);
$paysdorigine="inconnu";
$UA=getenv("HTTP_USER_AGENT");
$page_lang=getlangfromUA($UA);
if ($page_lang)
{
 $page_lang=strtoupper($page_lang);
 $preg="/^(?:[A-Z]{2}-)?([A-Z]{2})/";
 preg_match($preg,$page_lang,$lang);
 $acceptlang=$lang[1];
  switch ($acceptlang)
  {
  case "EL" : $paysdorigine="GREECE";break;
  case "HE" : $paysdorigine="ISRAEL";break;
  case "SE" : $paysdorigine="SWEDEN";break;
  case "JA" : $paysdorigine="JAPAN";break;
  default : $result=mysql_query("SELECT DISTINCT `COUNTRY_NAME` FROM `origin` WHERE `COUNTRY_CODE`='$acceptlang'");
            $test=mysql_fetch_row($result);
            if ($test[0]){$paysdorigine=$test[0];}
  }
}
/*Résultat :
$paysdorigine="inconnu"; */

Examiner le "referrer" quand il est présent et extraire le domaine du moteur de recherche peut aussi apporter un élément supplémentaire.

6. MaxMind GeoLite

Pays : United States

Plutôt fiable avec : la plupart des grands pays.

Peu fiable avec : AOL, tele2, chello, colt, les grosses sociétés.

Code avec votre IP (54.224.30.39) :

`geolite` est la table créée à partir du fichier geolite

$paysdorigine="inconnu";
$no_ip=$_SERVER["REMOTE_ADDR"]; /*$no_ip="54.224.30.39";*/
/*ou $no_ip=getenv("REMOTE_ADDR");*/
$serveur=mysql_connect(host,username,password);/*Entrez ici les informations concernant votre base MySQL*/
$base=mysql_select_db(database,$serveur);
$res=mysql_query("SELECT cn FROM `geolite`
WHERE inet_aton('$no_ip')>=start AND inet_aton('$no_ip')<=end;");
$ref=mysql_fetch_row($res);
if($ref[0]){$paysdorigine=$ref[0];}
/*Résultat :
$paysdorigine="United States"; */

phpwhois 4.2.2

Vous pouvez afficher la page sans les restrictions liées à l'hébergeur.

A condition de disposer des fonctions php fsockopen() et sleep() (ce qui n'est pas le cas avec free.fr), la méthode la plus efficace si on se limite à peu de requêtes c'est celle de phpwhois.
Une requête au serveur whois concerné et toutes les informations sont transmises dans un tableau.
Le code du pays se trouvera dans $result['rawdata'][14].

`origin` est la table créée à partir du fichier d'ip-to-country

$query = $_SERVER["REMOTE_ADDR"];
/*ou $query=getenv("REMOTE_ADDR");*/
include_once('phpwhois-4.0.1/whois.main.php');
$whois = new Whois();
$result = $whois->Lookup($query);
$country=$result['rawdata'][14];
$country_code= trim(str_replace("Country:", "", $country));
//
$serveur=mysql_connect(host,username,password);/*Entrez ici les informations concernant votre base MySQL*/
$base=mysql_select_db(database,$serveur);
$test=mysql_query("SELECT DISTINCT `COUNTRY_NAME` FROM `origin` WHERE `COUNTRY_CODE`='$country_code'");
$country_name=mysql_fetch_row($test);
$paysdorigine=$country_name[0];

 
cssvalidationw3cvalidation