Logger ses visiteurs avec un web-bug

Vous possédez un site perso chez free.fr et vous en avez marre des stats minables proposés par l'hébergeur (pas d'indication de provenance des visiteurs, génération nocturne des rapports, ...)? No soucy, voici le web-bug, une pixel invisible mais pourtant plutôt puissant!

REQUIS
Une base de données MySQL, et PHP. C'est tout et c'est disponible chez free.fr
 

CREATION DE LA TABLE
Dans un premier temps, nous créons une table permettant de stocker les infos de log (la page visitée, la date et l'heure, le nom de la machine du visiteur, et son browser). on crée pour cela un fichier texte table.txt avec le contenu suivant :


create table logs (
log_ID int not null auto_increment,
log_page text,
log_date timestamp,
log_hostname text,
log_http_agent text,
log_http_referrer text,
key(log_ID)
);

Importer la table  dans la base test avec la commande:
mysql test < table.txt
Vérifier que tout s'est bien déroulé :
mysql test
mysql>describe logs;

INSERTION D'UN LOG DANS LA BASE

On crée ensuite le fichier log.php3 qui


<?php

Header( "Content-type:  image/gif"); //header de type gif
passthru( "cat clear.gif" );  //
$address = gethostbyaddr($REMOTE_ADDR);  //récupère le nom correspondant à l'adresse IP du
switch($c)
{
 case 1:
 $page = "index.html";
 break;
 case 2:
 $page = "cv.html";
 break;
}

$conn = mysql_connect();
if (!$conn) {
  echo "Connection impossible\n";
  exit;
}
$requete = sprintf("insert into logs values (null, \"%s\", null, \"%s\", \"%s\", \"%s\");", $page, $address, $HTTP_USER_AGENT, $HTTP_REFERRER);
echo $requete;
$res = mysql_db_query("test", $requete, $conn);
if (!$res) {
  echo "Problème lors de la requète!\n";
  exit;
}

mysql_close($conn);
?>


INCLURE UNE PORTION DE CODE HTML DANS VOS PAGES
Voici le morceau de code à inclure dans vos pages:

<script language="JavaScript">
   document.write("<IMG SRC=\"http://genomenews.free.fr/log.php3?referrer=" + escape(document.referrer) + "\" height=1 width=1>");
</script>

3 . CONSULTATION DES RESULTATS
 
 

<HTML><BODY BGCOLOR="#9999cc">
<CENTER><B>JOURNAL DES CONNECTIONS RECENTES</B><BR><BR>
<?php
 

$host = "localhost";
$user = "olly";
$pswd = "";
$database = "test";

$conn = mysql_connect($host, $user, $pswd);
if (!$conn)
 echo "Connection impossible!\n";

$result = mysql_db_query($database, "select * from logs");

echo "<TABLE BORDER=\"1\">\n";
echo "<TR BGCOLOR=\"gray\">\n";
echo "<TD>ID</TD> <TD>page visitée</TD> <TD>visiteur</TD> <TD>date et heure</TD><TD><CENTER>Browser/OS</CENTER></TD>\n";
echo "</TR>\n";
while ($row = mysql_fetch_array($result))
{
 echo "<TR>\n";
 echo "<TD>".$row["log_ID"]."</TD><TD>".$row["log_page"]."</TD><TD>".$row["log_hostname"]."</TD><TD>".$row["log_date"]."</TD><TD>".$row["log_http_agent"]."</TD>\n";
 echo "</TR>\n";
}
echo "</TABLE>\n";

mysql_free_result($result);
mysql_close();

?>
</CENTER>
</BODY></HTML>