Sauvegarde adresse ip visiteur

Soyez le premier à donner votre avis sur cette source.

Vue 50 889 fois - Téléchargée 894 fois

Description

script de sauvegarde adresse ip visiteur sauf les adresses des bots et autre crawler, un cookie est émis pour une durée variable selon le webmaster afin de n'enregistré que une seul fois par durée le visiteur, ce script a pour but de fournir des statistiques sur l'origines des visiteurs afin de permettre d'optimiser les pages et le référencement en fonction de l'origine des visiteurs et d'éliminer les spammeurs, ainsi que de localiser le pays grace au fichier csv

Source / Exemple :


<?php
header('Content-Type: text/html; charset=ISO-8859-1');//fonction définnissant le charset
header('X-UA-Compatible: IE=edge');//fonction supprimant le mode compatibilité d'internet explorer 10
setcookie('traceur', 'espion', (time() + 43200));//fonction cookie permettant de ne sauvegarde que une seul fois l'adresse pendant une ppériode définie
function get_ip()//fonction détectant de la meilleur façon possible la vraie adresse ip pour autant que le proxy soit transparent
{
    global $REMOTE_ADDR;
    global $HTTP_X_FORWARDED_FOR, $HTTP_X_FORWARDED, $HTTP_FORWARDED_FOR, $HTTP_FORWARDED;
    global $HTTP_VIA, $HTTP_X_COMING_FROM, $HTTP_COMING_FROM;
    if (empty($REMOTE_ADDR) && PMA_getenv('REMOTE_ADDR')) {
        $REMOTE_ADDR = PMA_getenv('REMOTE_ADDR');
    }
    if (empty($HTTP_X_FORWARDED_FOR) && PMA_getenv('HTTP_X_FORWARDED_FOR')) {
        $HTTP_X_FORWARDED_FOR = PMA_getenv('HTTP_X_FORWARDED_FOR');
    }
    if (empty($HTTP_X_FORWARDED) && PMA_getenv('HTTP_X_FORWARDED')) {
        $HTTP_X_FORWARDED = PMA_getenv('HTTP_X_FORWARDED');
    }
    if (empty($HTTP_FORWARDED_FOR) && PMA_getenv('HTTP_FORWARDED_FOR')) {
        $HTTP_FORWARDED_FOR = PMA_getenv('HTTP_FORWARDED_FOR');
    }
    if (empty($HTTP_FORWARDED) && PMA_getenv('HTTP_FORWARDED')) {
        $HTTP_FORWARDED = PMA_getenv('HTTP_FORWARDED');
    }
    if (empty($HTTP_VIA) && PMA_getenv('HTTP_VIA')) {
        $HTTP_VIA = PMA_getenv('HTTP_VIA');
    }
    if (empty($HTTP_X_COMING_FROM) && PMA_getenv('HTTP_X_COMING_FROM')) {
        $HTTP_X_COMING_FROM = PMA_getenv('HTTP_X_COMING_FROM');
    }
    if (empty($HTTP_COMING_FROM) && PMA_getenv('HTTP_COMING_FROM')) {
        $HTTP_COMING_FROM = PMA_getenv('HTTP_COMING_FROM');
    }
    if (!empty($REMOTE_ADDR)) {
        $direct_ip = $REMOTE_ADDR;
    }
    $proxy_ip     = '';
    if (!empty($HTTP_X_FORWARDED_FOR)) {
        $proxy_ip = $HTTP_X_FORWARDED_FOR;
    } elseif (!empty($HTTP_X_FORWARDED)) {
        $proxy_ip = $HTTP_X_FORWARDED;
    } elseif (!empty($HTTP_FORWARDED_FOR)) {
        $proxy_ip = $HTTP_FORWARDED_FOR;
    } elseif (!empty($HTTP_FORWARDED)) {
        $proxy_ip = $HTTP_FORWARDED;
    } elseif (!empty($HTTP_VIA)) {
        $proxy_ip = $HTTP_VIA;
    } elseif (!empty($HTTP_X_COMING_FROM)) {
        $proxy_ip = $HTTP_X_COMING_FROM;
    } elseif (!empty($HTTP_COMING_FROM)) {
        $proxy_ip = $HTTP_COMING_FROM;
    }
    if (empty($proxy_ip)) {
        return $direct_ip;
    } else {
        $is_ip = preg_match('|^([0-9]{1,3}\.){3,3}[0-9]{1,3}|', $proxy_ip, $regs);
        if ($is_ip && (count($regs) > 0)) {
            return $regs[0];
        } else {
          return FALSE;
        }
    } 
}
function PMA_getenv($var_name) {
    if (isset($_SERVER[$var_name])) {
        return $_SERVER[$var_name];
    } elseif (isset($_ENV[$var_name])) {
        return $_ENV[$var_name];
    } elseif (getenv($var_name)) {
        return getenv($var_name);
    } elseif (function_exists('apache_getenv')
     && apache_getenv($var_name, true)) {
        return apache_getenv($var_name, true);
    }

    return '';
}
$ip = get_ip();//fonction ip client
$fournisseur = gethostbyaddr($_SERVER['REMOTE_ADDR']);//fonction détectant fournisseur d'accès
$calendrier = date ("d-m-y");//fonction date calendrier
$horaire = date ("H:i:s");//fonction horaire 
$langage = $_SERVER['HTTP_ACCEPT_LANGUAGE'];//fonction langage client
$port_client = $_SERVER['REMOTE_PORT'];//fonction port de connection client
$ip_client = get_ip();//fonction ip client
$connection = $_SERVER['HTTP_CONNECTION'];//fonction détectant le type de connection
$protocol = $_SERVER['SERVER_PROTOCOL'];//fonction détectant le protocol
$agent = $_SERVER['HTTP_USER_AGENT'];//fonction détectant l'user agent
$provenance = $_SERVER['HTTP_REFERER'];//fonction détectant la provenance du visiteur
$v6 = preg_match("/^[0-9a-f]{1,4}:([0-9a-f]{0,4}:){1,6}[0-9a-f]{1,4}$/", $ip);//fonction permettant de filtré les adresses ipv6
$v4 = preg_match("/^([0-9]{1,3}\.){3}[0-9]{1,3}$/", $ip);//fonction permettant de filtré les adresses ipv4
if ( $v6 != 0 )
$format = "adresse IP_v6";
elseif ( $v4 != 0 )
$format = "adresse IP_v4";
else
$format = "non identifier";

function getOS( $ua = '' )//fonction détectant le système d'exploitation
{
if(!$ua) $ua = $_SERVER['HTTP_USER_AGENT'];
$os = 'Système d\'exploitation non detecte';
$os_arr = Array('/Windows NT 6.2/'       => 'windows 8',
                '/Windows NT 6.1/'       => 'Windows Seven',
                '/Windows NT 6.0/'       => 'Windows Vista',
                '/Windows NT 5.2/'       => 'Windows Server 2003',
                '/Windows NT 5.1/'       => 'Windows XP',
                '/Windows NT 5.0/'       => 'Windows 2000',
                '/Windows NT/'           => 'Windows NT',
                '/Windows CE/'           => 'Windows Mobile',
                '/Win 9x 4.90/'          => 'Windows Millenium',
                '/Windows 98/'           => 'Windows 98',
                '/Windows 95/'           => 'Windows 95',
                '/Win95/'                => 'Windows 95',
                '/Ubuntu/'               => 'Linux Ubuntu',
                '/Fedora/'               => 'Linux Fedora',
                '/Linux/'                => 'Linux',
                '/Unix/'                 => 'Unix',
                '/Macintosh/'            => 'Mac',
                '/Mac OS X/'             => 'Mac OS X',
                '/FreeBSD/'              => 'FreeBSD',
                '/Unix/'                 => 'Unix',
                '/Playstation portable/' => 'PSP',
                '/OpenSolaris/'          => 'SunOS',
                '/SunOS/'                => 'SunOS',
                '/Nintendo Wii/'         => 'Nintendo Wii',
                '/Mac/'                  => 'Mac',
				'/AIX/'                  => 'AIX',
				'/IRIX/'                 => 'IRIX',
				'/BEOS/'                 => 'Beos',
				'/Android/'              => 'Android',
				'/BlackBerry/'           => 'Blackberry'
                );
$ua = strtolower($ua);
foreach( $os_arr as $k => $v )
{
if(preg_match(strtolower($k), $ua))
{
$os = $v;
break;
}
}
return $os;
}
$systeme = getOS( $_SERVER['HTTP_USER_AGENT'] );

function generer_num_ip($addr_ip)//transformation adresse ip en numéro ip
{
$decomposition = preg_split( "/[.]+/", $addr_ip);
$numip = (double) (16777216*$decomposition[0] + 65536*$decomposition[1] + 256*$decomposition[2] + $decomposition[3]);
return( $numip );
}
function process_csv($file, $ipnum)
{
$handle = fopen($file, "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
if( ($ipnum >= $data[2]) &&
($ipnum <= $data[3]))
{
break;
}
}
fclose($handle);
return $data[5];
}
$ipnum = generer_num_ip($ip);
$country = process_csv ('GeoIPCountryWhois.csv', $ipnum);//geoipcoutrywhois, dossier csv contenant la liste des pays fiable à 90%
$pays = $country;

// formattage de la page
$save = "";
$save = ('<div class="gauche">'.'heure de visite :&nbsp;'.$horaire.'<br />'.'date de visite :&nbsp;'.$calendrier.'<br />'.'langue du visiteur :&nbsp;'.$langage.'<br />'.'port pc client :&nbsp;'.$port_client.'<br />'.'adresse ip client :&nbsp;'.$ip_client.'<br />'.'type d\'adresse :&nbsp;'.$format.'<br />'.'fournisseur client :&nbsp;'.$fournisseur.'<br />'.'connection client :&nbsp;'.$connection.'<br />'.'protocol client :&nbsp;'.$protocol.'<br />'.'système d\'exploitation :&nbsp;'.$systeme.'<br />'.'user-agent :&nbsp;'.$agent.'<br />'.'provenance :&nbsp;'.$provenance.'<br />'.'pays :&nbsp;'.$pays.'<hr style="color:#ff0000;background-color:#ff0000;border-color:#ff0000;width:80%;size:2px">'.'</div>'."\n");
if($_COOKIE['traceur'])
{
}
elseif (preg_match("/msnbot/i", $fournisseur))//exclusion bots msn
{
return false;
}
elseif (preg_match("/crawl/i", $fournisseur))//exclusion bots crawl google
{
return false;
}
elseif (preg_match("/phx.gbl/i", $fournisseur))//exclusion bots phx
{
return false;
}
elseif (preg_match("/zvelo/i", $fournisseur))//exclusion bots zvelo
{
return false;
}
elseif($agent == 'Aboundex/0.2 (http://www.aboundex.com/crawler/)')//exclusion bots aboundex
{
return false;
}
elseif($agent == 'Mozilla/5.0 (compatible; OpenindexSpider; +http://www.openindex.io/en/webmasters/spider.html)')//exclusion bots open index
{
return false;
}
elseif($agent == 'Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0; +http://fulltext.sblog.cz/screenshot/)')//exclusion bots seznam
{
return false;
}
elseif($agent == 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')//exclusion bots google
{
return false;
}
elseif($agent == ' Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp) NOT Firefox/3.5')//exclusion bots yahoo
{
return false;
}
elseif($agent == 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; SLCC1; .NET CLR 1.1.4322; .NET CLR 2.0.40607; .NET CLR 3.0.30729; .NET CLR 3.5.30707)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; SV1; .NET CLR 1.1.4325; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4325; .NET CLR 2.0.40607; .NET CLR 3.0.04506.648)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.40607; .NET CLR 3.0.04506.648)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; SLCC1; .NET CLR 1.1.4322; .NET CLR 2.0.40607; .NET CLR 3.0.30729)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4325; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)')//exclusion bots bing
{
return false;
}
elseif($agent == 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b')//exclusion bots msn
{
return false;
}
elseif($agent == 'msnbot/2.0b (+http://search.msn.com/msnbot.htm)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)')//exclusion bots msn
{
return false;
}
elseif($agent == 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)')//exclusion bots voila
{
return false;
}
elseif($agent == 'DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)')//exclusion bots google mobile
{
return false;
}
elseif($agent == 'SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)')//exclusion bots google mobile
{
return false;
}
else
{
// partie enregistrement de la page
$fp = fopen('ip.html',a);
fwrite($fp,$save);
fclose($fp);
}
?>

Conclusion :


des commentaires ont été placer à la demande de stay, la fonction détection du pays à également été ajouter grace au fichier csv issu de chez maxmind

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

janhsh
Messages postés
6
Date d'inscription
samedi 10 octobre 2009
Statut
Membre
Dernière intervention
21 février 2019

ce script utilise des fonctionnalités obsolètes
par exemple:
L'appel de la fonction date ("d-m-y") doit être obligatoirement être précédé d'un appel à date_default_timezone_set

On n'écrit jamais les variables en majuscule. Les majuscules sont réservées pour les constantes. c'est une règle de bonne pratique en php ou les variables systèmes

==> écrire global $REMOTE_ADDR; global $HTTP_X_FORWARDED_FOR
est une très mauvaise idée. ces variables peuvent exister en tant que variables systèmes en fonction de la config du serveur

|^([0-9]{1,3}\.){3,3}[0-9]{1,3}| ==> pourquoi créer une première parenthèse capturante pour ne finalement pas utilise la capture ?

$port_client = $_SERVER['REMOTE_PORT']; ne fonctionne pas si il y a un proxy
en fait cette fonction ne fait que retourner le port du proxy pas le port du client
le port du client est contenu dans HTTP_X_FORWARDED
jadu
Messages postés
225
Date d'inscription
mercredi 26 juillet 2006
Statut
Membre
Dernière intervention
16 août 2018

Bon, ben j'ai tout laissé tomber. En fin de compte je m'en passe très bien !

bon courage pour commenter !!!

;D

en complément du script, vu le nombre d'ip à bannir, pour éviter de surcharger le htaccess, voici un simple script de redirection en fonction du pays, les internautes des pays bannis seront dans ce cas ci rediriger vers un site de leurs propre pays, libre à vous de les rediriger ou vous le voulez

$pays_bannis_1 = 'Chine';
$pays_bannis_2 = 'Japon';
$pays_bannis_3 = 'Corée du nord';
$pays_bannis_4 = 'Taiwan';
$pays_bannis_5 = 'Hong Kong';
$pays_bannis_6 = 'Ukraine';
$pays_bannis_7 = 'Benin';
$pays_bannis_8 = 'Cote D\'Ivoir';
$pays_bannis_9 = 'Russie';

if ($pays == $pays_bannis_1)
{
header ('location: http://www.cntv.cn/');
exit;
}
elseif ($pays == $pays_bannis_2)
{
header ('location: http://www.nhk.or.jp/');
exit;
}
elseif ($pays == $pays_bannis_3)
{
header ('location: http://www.kctvjeju.com/index_intro.asp');
exit;
}
elseif ($pays == $pays_bannis_4)
{
header ('location: http://www.cts.com.tw/');
exit;
}
elseif ($pays == $pays_bannis_5)
{
header ('location: http://rthk.hk/');
exit;
}
elseif ($pays == $pays_bannis_6)
{
header ('location: http://www.ukraine.com/tv/');
exit;
}
elseif ($pays == $pays_bannis_7)
{
header ('location: http://www.ortb.info/');
exit;
}
elseif ($pays == $pays_bannis_8)
{
header ('location: http://www.abidjantv.net/');
exit;
}
elseif ($pays == $pays_bannis_9)
{
header ('location: http://www.1tv.ru/');
exit;
}

nouvelle liste d'adresse ip dangereuse à utiliser sans modération pour protéger votre site avec un htaccess ou du php si pas accès au htaccess, les plages à deux groupes de chiffres sont des adresse asiatique, les ip complètes sont issus d'autre pays et sont blacklisté dans différentes base de données

*
Order Allow,Deny
Allow from all
Deny from 89.149.223.180
Deny from 78.159.112.128
Deny from 62.195.43.27
Deny from 89.248.165.143
Deny from 87.67.28.90
Deny from 37.117.42.199
Deny from 81.169.144.135
Deny from 82.233.4.140
Deny from 109.111.145.224
Deny from 80.80.154.70
Deny from 79.86.116.24
Deny from 109.130.67.230
Deny from 173.45.73.18
Deny from 82.228.72.12
Deny from 213.213.201.137
Deny from 92.105.149.237
Deny from 105.146.12.180
Deny from 87.66.170.167
Deny from 190.46.146.168
Deny from 89.98.3.148
Deny from 197.15.11.168
Deny from 197.28.41.59
Deny from 41.107.96.200
Deny from 88.219.196.100
Deny from 216.99.152.114
Deny from 93.33.236.40
Deny from 186.1.206.82
Deny from 87.20.11.201
Deny from 109.130.70.73
Deny from 67.68.89.238
Deny from 149.229.94.13
Deny from 80.255.61.162
Deny from 78.250.215.72
Deny from 82.254.161.206
Deny from 1.2.
Deny from 119.147.
Deny from 46.109.
Deny from 114.158.
Deny from 120.36.
Deny from 58.251.
Deny from 186.9.
Deny from 61.154.
Deny from 176.195.
Deny from 14.145.
Deny from 218.8.
Deny from 142.0.
Deny from 46.73.
Deny from 95.220.
Deny from 220.169.
Deny from 27.159.
Deny from 94.153.
Deny from 117.76.
Deny from 218.213.
Deny from 183.15.
Deny from 221.204.
Deny from 201.141.
Deny from 46.119.
Deny from 61.158.
Deny from 120.43.
Deny from 183.13.
Deny from 183.16.
Deny from 180.153.
Deny from 121.205.
Deny from 219.142.
Deny from 41.222.
Deny from 175.44.
Deny from 183.60.
Deny from 27.40.
Deny from 1.202.
Deny from 198.73.
Deny from 182.209.
Deny from 110.83.
Deny from 110.84.
Deny from 110.87.
Deny from 110.88.
Deny from 110.82.
Deny from 110.89.
Deny from 114.89.
Deny from 59.56.
Deny from 124.42.
Deny from 113.103.
Deny from 220.161.
Deny from 220.181.
Deny from 120.32.
Deny from 120.40.
Deny from 120.128.
Deny from 110.85.
Deny from 110.86.
Deny from 219.132.
Deny from 117.29.
Deny from 218.93.
Deny from 27.156.
Deny from 27.151.
Deny from 110.90.
Deny from 112.95.
Deny from 27.155.
Deny from 222.124.
Deny from 222.79.
Deny from 117.79.
Deny from 94.102.52.
Deny from 110.84.
Deny from 110.83.
Deny from 110.87.
Deny from 120.32.
Deny from 123.125.
Deny from 89.107.

grace a ce script je fournis déjà une liste d'adresse ip blacklisté, celleà deux groupe de chiffres sont les plages ip chinoise qui scanne des infos privée mail et autre, les ip complète sont blacklistée, je les aies controlées sur le site dnslockup.fr, pour votre sécurité protéger vous en les mettant soit dans le htaccess comme ou en php si vous n'avez pas accès au htaccess, voici la liste.

*
Order Allow,Deny
Allow from all
deny from 89.149.223.180
deny from 78.159.112.128
deny from 178.33.142.48
deny from 62.195.43.27
deny from 89.248.165.143
deny from 178.162.191.58
deny from 87.67.28.90
deny from 37.117.42.199
deny from 178.238.235.184
deny from 81.169.144.135
deny from 82.233.4.140
deny from 109.111.145.224
deny from 80.80.154.70
deny from 79.86.116.24
deny from 109.130.67.230
deny from 173.45.73.18
deny from 82.228.72.12
deny from 213.213.201.137
deny from 92.105.149.237
deny from 105.146.12.180
deny from 221.204.
deny from 201.141.
deny from 46.119.
deny from 61.158.
deny from 120.43.
deny from 183.13.
deny from 183.16.
deny from 180.153.
deny from 121.205.
deny from 219.142.
deny from 41.222.
deny from 175.44.
deny from 183.60.
deny from 27.40.
deny from 1.202.
deny from 198.73.
deny from 182.209.
deny from 110.83.
deny from 110.84.
deny from 110.87.
deny from 110.88.
deny from 110.82.
deny from 110.89.
deny from 114.89.
deny from 59.56.
deny from 124.42.
deny from 113.103.
deny from 220.161.
deny from 220.181.
deny from 120.32.
deny from 120.40.
deny from 120.128.
deny from 110.85.
deny from 110.86.
deny from 219.132.
deny from 117.29.
deny from 218.93.
deny from 27.156.
deny from 27.151.
deny from 110.90.
deny from 112.95.
deny from 27.155.
deny from 222.124.
deny from 222.79.
deny from 117.79.
deny from 94.102.52.
deny from 123.125.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.