J’ai modifié le billet permettant de récupérer la ville d’un visiteur d’un site web car le fichier à télécharger n’a plus le même nom… Donc mettez à jour
En effet, la mise a jour se fait plus d’une fois par mois et ne se fait pas forcément le 1er du mois… Du coup le script ne marchait pas et les tables se retrouvaient vides… Mais le bug est corrigé…
C3 m471n 4l0r5 qu3 j3 m3 pr0m3n415 5ur 20m1nu735.fr j3 5u15 70m83 5ur un3 p7173 v1d30 qu1 53 p4553 d3 70u7 c0mm3n741r3, 54uf un 80n v13ux l0l… M415 l4 j3 m’4p3rç015 qu3 j3 5u15 3n r374rd…
Un 53ul m07 j3 v0u5 l41553 4ppr3c13r (m1nc3 c4 f417 plu5 qu3 un… :5)
Vous n’avez rien compris ? Alors cette vidéo est faite pour vous…
Salut à tous, on m’a demandé plusieurs fois comment j’ai réussi « l’exploit » de trouver la ville d’une personne qui visite votre site internet. Ça se passe en plusieurs étapes.
Déjà un pré-requis est d’avoir un serveur dédié pour optimiser les choses…
Il y a un site très intéressant qui regroupe toutes les IP et à quelle ville cela correspond. Donc une fois la correspondance trouvée il suffit de récupérer l’IP du visiteur et le tour est joué… Enfin presque.
- Préparation de la base de données
Dans un premier temps il faut récupérer le fichier et l’entrer dans sa base de données. Créer les tables avec la requête suivante :
-
–
-
– Structure de la table `City_Block`
-
–
-
-
CREATE TABLE `City_Block` (
-
`startIpNum` bigint(10) NOT NULL,
-
`endIpNum` bigint(10) NOT NULL,
-
`locId` bigint(10) NOT NULL
-
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-
– ——————————————————–
-
-
–
-
– Structure de la table `City_Location`
-
–
-
-
CREATE TABLE `City_Location` (
-
`locId` bigint(10) NOT NULL,
-
`country` varchar(2) NOT NULL,
-
`region` varchar(2) NOT NULL,
-
`city` varchar(50) NOT NULL,
-
`postalCode` varchar(5) NOT NULL,
-
`latitude` varchar(7) NOT NULL,
-
`longitude` varchar(7) NOT NULL,
-
`metroCode` varchar(5) NOT NULL,
-
`areaCode` varchar(5) NOT NULL,
-
PRIMARY KEY (`locId`)
-
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Remplissage de la base de données
Pour intégrer le fichier dans sa base de données écrire le script suivant.
-
LOG=/log/geoip.log
-
echo "" >>; $LOG
-
echo "Debut du remplissage `date`">>$LOG
-
DATE=`date +%Y%m`
-
adresse=http://www.maxmind.com/download/geoip/database/GeoLiteCity_CSV/
-
cd /tmp
-
wget http://www.maxmind.com/download/geoip/database/GeoLiteCity_CSV/
-
fic=`cat index.html | grep zip | cut -d\" -f6 | tail -1`
-
rm index.html
-
wget $adresse/$fic
-
unzip $fic
-
rm $fic
-
cd GeoLiteCity*
-
pwd
-
sed -e s/\"//g GeoLiteCity-Blocks.csv > GeoLiteCity-Blocks.tmp && mv -f GeoLiteCity-Blocks.tmp GeoLiteCity-Blocks.csv
-
sed -e s/\"//g GeoLiteCity-Location.csv > GeoLiteCity-Location.tmp && mv -f GeoLiteCity-Location.tmp GeoLiteCity-Location.csv
-
mysql -uUSER -pPASSWD < < EOF
-
use geoip
-
TRUNCATE TABLE City_Block;
-
TRUNCATE TABLE City_Location;
-
LOAD DATA LOCAL INFILE ‘GeoLiteCity-Blocks.csv’
-
INTO TABLE City_Block
-
FIELDS TERMINATED BY ‘,’
-
LINES TERMINATED BY ‘\n‘;
-
-
LOAD DATA LOCAL INFILE ‘GeoLiteCity-Location.csv’
-
INTO TABLE City_Location
-
FIELDS TERMINATED BY ‘,’
-
LINES TERMINATED BY ‘\n‘;
-
exit
-
EOF
-
echo "—–Nombres d‘entrees pour les blocks : `wc -l GeoLiteCity-Blocks.csv`">>$LOG
-
echo "Fin du remplissage `date`">>$LOG
-
echo "–nb d entrees pour les vilels : `wc -l GeoLiteCity-Location.csv`">> $LOG
-
cd /tmp
-
rm -rf GeoLiteCity*
-
echo "Fin du traitement `date`"
-
Le fichier est mis à jour une fois par mois. Vous pouvez donc intégrer le script dans votre crontab. Personnellement j’ai essayé de le faire le 2 du mois mais il y a eu comme un bug, du coup je le fais le 5 du mois et ca marche très bien
- Intégration dans une page internet
C’est bien joli d’avoir une belle base de données, mais encore faut-il pouvoir l’utiliser. Le principe de fonctionnement de la base est qu’une ip qui s’ecrit normalement en 10.2.5.9 s’écrit en un seul chiffre. Comment est-ce possible ? Tout simplement en utilisant une base 256… Et oui de 0 à 255 ca fait bien 256 chiffres; Je vous passe la conversion mais c’est le même principe que les conversions hexa, binaire… Ensuite comme les donnes fonctionne par plage il suffit de trouver à quelle plage appartient notre IP et le tour est joué.
Voici donc le code qu’il faut inclure dans votre page web :
-
< ?php
-
//*********************************************************
-
// Retourne l’adresse IP du visiteur
-
//*********************************************************
-
function get_Ip() {
-
if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])) {
-
$ip = $_SERVER[‘HTTP_X_FORWARDED_FOR’];
-
}
-
elseif(isset($_SERVER[‘HTTP_CLIENT_IP’])) {
-
$ip = $_SERVER[‘HTTP_CLIENT_IP’];
-
}
-
else {
-
$ip = $_SERVER[‘REMOTE_ADDR’];
-
}
-
return $ip;
-
}
-
-
-
//*********************************************************
-
// fonction qui ransforme l’IP en nombre
-
//*********************************************************
-
function IPAddress2IPNumber($dotted)
-
{
-
-
$ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
-
return $ip;
-
}
-
-
//***************************************
-
//Fonction pour avoir la ville
-
//**************************************
-
function IpEnVille($uneIp)
-
{
-
-
-
-
-
// transforme l’ip en nombre
-
$uneIp=IPAddress2IPNumber($uneIp);
-
-
$sql_locId ="SELECT City_Block.locId FROM City_Block WHERE ‘".$uneIp."’ BETWEEN startIpNum AND endIpNum ";
-
-
-
$retour=$data[locId];
-
$locId=$retour;
-
-
$sql_city = "SELECT City_Location.city FROM City_Location WHERE locId = ‘".$locId ."’;";
-
-
-
$city=$data_city[city];
-
-
-
return $city;
-
}
Ensuite il suffit d’appeler la fonction de cette facon
Voilà , si vous avez des questions n'hésitez pas... Mais en suivant step by step ca devrait aller tout seul
Catégorie : Informatique, Webmaster
|
Tags : bash, geoip, geolocalisation, localisation, localiser ip, php, script, situer une ip, unix, Webmaster |
13 commentaires
Salut à tous, alors que je voulais faire une belle correction orthographique de mon précèdent billet je me suis aperçu que les élections nous suivaient vraiment partout… En effet, j’ai oublié un accent sur le mot connaître et que me propose Word pour corriger cela ? Je vous le donne en mille : ELECTION. Vous ne me croyez pas ? Et bien voici la preuve en images… Enjoy. Et c’est garanti sans montage photo…

Salut à tous, mon blog n’est pas vieux, je dirais même qu’il est plutôt jeune et du coup il n’est pas encore bien connu. En faisant une petite recherche de mon ami du net préféré je suis tombé sur un drôle de site…
En effet, il me proposait de participer à une chaine de l’amitié (ou presque). Et oui, toi qui cherche des visiteurs j’ai la solution miracle ! Tu vois la liste de blog ici —> lÃ
Oui là —> ici, mais pas à cet endroit <— hein
Donc cette liste tu la copies dans un mail et tu l’envoies à tous tes contacts. Ah oui j’oubliais, il faut faire un système de rotation pour que ton blog oui TON blog soit en dernière positon et tu vires le blog numéro un. Mais un détail très important… Avant de virer le lien un, visite le ! ! !
Bah oui si tu visites pas, ça marche pas ce système… Dois-je te rappeler que c’est un système pyramidal ! ! !
Ce site m’a doucement fait rappelé ce système simple et rapide de gagner de l’argent avec un simple investissement de 5 euros… Toujours est-il que j’ai bien ri et me demande comment certaines personnes sont assez naïves pour tomber dans le panneau… Si ce système marchait j’aurai des millions de visiteurs chaque jour sur mon site, et je serais multimillionaire ! ! ! !
Alors soyez sages, si vous voyez ce genre d’arnaque fuiez, ca sent l’arnaque à plein nez. Et pour faire connaitre mon blog, je vais faire de l’autopromotion : revenez aussi souvent que possible et parlez-en autour de vous