Bonjour
Le problème de la détection des bots, a maintes fois été évoqué sur ce forum, cependant j'ai essayé de voir d'après des mots-clés dans les messages passés, et je n'ai pas trouvé de moyen de détecter les bots.
Je sais, que de nombreuses adresses ip de bots n'ont pas de reverse. Evidemment, il faudrait disposer d'une table de ces adresses ip, mais je n'ai pas celà pour l'instant.
J'ai programmé cette petite fonction ci-dessous is_bot($ip_address) en php , qui me détecte effectiveemnt des bots.
Sur mon site, quand un bot est déctecté de cette manière, son adresse ip filtrée ( passée à la moulinette de la focntion filtered_address($ip_address) ) , est insérée dans une tabkle MySQL des bots BOT_ADDRESS, ne contenant qu'un seul champ
TABLE BOT_ADDRESS(IP_ADDRESS VARCHAR(100) NOT NULL PRIMARY KEY DEFAULT '');
Evidemment, vu le primary key, l'insert n'a lieu qu'une fois pour la même adresse ip filtrée.
Donc, celà me sert simplement, à éliminer de ma table MySQL CONNEXION les adresses ip filtrées, datant de plus de 20 secondes, qui existent aussi dans la table BOT_ADDRESS.
Celà peut se faire en une seule instruction MySQL.
L'appel à la fonction is_bot() , n'est fait qu'à chaque fois qu'un nouvau vsiiteur se présente sur mon site.
Un nouveau visiteur est une visite qui ne s'est pas terminée précédemment, dans un délai de 5 minutes maximum depuis le dernier chargement de page de la dernière visite éventuelle.
A mon avis, le seul délai en cause, est l'appel dans cette fonction is_bot(), à la fonction gethostbyaddr() , qui nécessite une requête à un servur DNS, puis le retour de l'information.
Je ne fais pas du tout de cloaking, le comportement de mon site est strictement le même, pour une visite de bot, ou autre chose.
Et même, si le bot interprète le Javascript, mon site se comporte de la même façon que pour n'importe quel visiteur qui accepte le Javascript.
Simplement, je suis désireux, d'une part de détecter si Javascritp est activé ou non, et/ou les Cooies acceptés ou non, ceci de manière automatique.
Si l'un des deux ( ou les deux ), ne sont pas actifs, un message s'affiche, suggérant de permettre Javascript et les Cookies.
D'autre part, le procédé que j'utilise, me permet de garder trace des visites de mes visiteurs, sur une période passée de 1 mois 1/2 ( 45 jours ), ce qui me permettra, à terme, de faire des statistiques de trafic.
Merci beaucoup, de me donner vos avis et suggestions, par rapport à la fiabilité de cette fonction is_bot()
Par exemple, l'array list_bots() , auait probablement besoin d'être complété.
Bien amicalement.
Jean Françosi Ortolo
-----------------------------------------------------------------------------
/*
* Danc cette fonction, les constantes
* IP4_POINT_NUMBER et
* IP6_POINT_NUMBER,
* valent respectvement, :
* 1, et 2.
*/
function filtered_address($ip_address)
{
if(!empty($ip_address))
{
//
// 4 nombres,
// séparés par
// un point.
if(preg_match("{^([0-9]+)(\.[0-9]+){3}$}", $ip_address))
$last_point_number = IP4_POINT_NUMBER;
else
$last_point_number = IP6_POINT_NUMBER;
$tmp_array_ip_addr = array();
if(preg_match("{\.}", $ip_address))
$tmp_array_ip_addr = preg_split("{\.}", $ip_address);
else
$tmp_array_ip_addr[0] = $ip_address;
$tmp_count = count($tmp_array_ip_addr);
$fix_ip_addr = $tmp_array_ip_addr[0];
for($i = 1; $i < ($tmp_count - $last_point_number); $i++)
$fix_ip_addr .= "." . $tmp_array_ip_addr[$i];
}
else
{
$fix_ip_addr = false;
}
return($fix_ip_addr);
}
function is_bot($ip_address)
{
$list_bots = array("#bing#", "#babylon#", "#search#", "#aol#", "#voila#", "#incredimail#", "#ia[_-]?archiver#", "#ask#", "#teoma#", "#spider#", "#exabot#", "#thumbnails#", "#gamespy#", "#gigabot#", "#google#", "#grub#", "#inktomi#", "#slurp#", "#msnbot#", "#scooter#", "#altavista#", "#w3c[_-]?validator#", "#yahoo#", "#yandex#");
$n = count($list_bots);
/*
* C'est l'adresse ip filtrée
* de ma propre connexion
* Internet, car il semble
* que quelqu'un
* ait choisi comme reverse,
* un nom de bot.
*/
$permitted_bots = array('82.225.74');
if(empty($ip_address))
return(false);
$fix_address = filtered_address($ip_address);
$url = gethostbyaddr($ip_address);
if(in_array($fix_address, $permitted_bots))
return(false);
if($url !== false)
{
if($url != $ip_address)
{
$url = strtolower($url);
for($i = 0; $i < $n; $i++)
if(preg_match($list_bots[$i], $url))
break;
if($i < $n)
{
return(true);
}
else
return(false);
}
else
return(false);
}
else
return(false);
}
--------------------------------------------------------------------------------------
Le problème de la détection des bots, a maintes fois été évoqué sur ce forum, cependant j'ai essayé de voir d'après des mots-clés dans les messages passés, et je n'ai pas trouvé de moyen de détecter les bots.
Je sais, que de nombreuses adresses ip de bots n'ont pas de reverse. Evidemment, il faudrait disposer d'une table de ces adresses ip, mais je n'ai pas celà pour l'instant.

J'ai programmé cette petite fonction ci-dessous is_bot($ip_address) en php , qui me détecte effectiveemnt des bots.
Sur mon site, quand un bot est déctecté de cette manière, son adresse ip filtrée ( passée à la moulinette de la focntion filtered_address($ip_address) ) , est insérée dans une tabkle MySQL des bots BOT_ADDRESS, ne contenant qu'un seul champ
TABLE BOT_ADDRESS(IP_ADDRESS VARCHAR(100) NOT NULL PRIMARY KEY DEFAULT '');
Evidemment, vu le primary key, l'insert n'a lieu qu'une fois pour la même adresse ip filtrée.
Donc, celà me sert simplement, à éliminer de ma table MySQL CONNEXION les adresses ip filtrées, datant de plus de 20 secondes, qui existent aussi dans la table BOT_ADDRESS.
Celà peut se faire en une seule instruction MySQL.
L'appel à la fonction is_bot() , n'est fait qu'à chaque fois qu'un nouvau vsiiteur se présente sur mon site.
Un nouveau visiteur est une visite qui ne s'est pas terminée précédemment, dans un délai de 5 minutes maximum depuis le dernier chargement de page de la dernière visite éventuelle.
A mon avis, le seul délai en cause, est l'appel dans cette fonction is_bot(), à la fonction gethostbyaddr() , qui nécessite une requête à un servur DNS, puis le retour de l'information.
Je ne fais pas du tout de cloaking, le comportement de mon site est strictement le même, pour une visite de bot, ou autre chose.
Et même, si le bot interprète le Javascript, mon site se comporte de la même façon que pour n'importe quel visiteur qui accepte le Javascript.
Simplement, je suis désireux, d'une part de détecter si Javascritp est activé ou non, et/ou les Cooies acceptés ou non, ceci de manière automatique.
Si l'un des deux ( ou les deux ), ne sont pas actifs, un message s'affiche, suggérant de permettre Javascript et les Cookies.
D'autre part, le procédé que j'utilise, me permet de garder trace des visites de mes visiteurs, sur une période passée de 1 mois 1/2 ( 45 jours ), ce qui me permettra, à terme, de faire des statistiques de trafic.
Merci beaucoup, de me donner vos avis et suggestions, par rapport à la fiabilité de cette fonction is_bot()

Par exemple, l'array list_bots() , auait probablement besoin d'être complété.

Bien amicalement.
Jean Françosi Ortolo
-----------------------------------------------------------------------------
/*
* Danc cette fonction, les constantes
* IP4_POINT_NUMBER et
* IP6_POINT_NUMBER,
* valent respectvement, :
* 1, et 2.
*/
function filtered_address($ip_address)
{
if(!empty($ip_address))
{
//
// 4 nombres,
// séparés par
// un point.
if(preg_match("{^([0-9]+)(\.[0-9]+){3}$}", $ip_address))
$last_point_number = IP4_POINT_NUMBER;
else
$last_point_number = IP6_POINT_NUMBER;
$tmp_array_ip_addr = array();
if(preg_match("{\.}", $ip_address))
$tmp_array_ip_addr = preg_split("{\.}", $ip_address);
else
$tmp_array_ip_addr[0] = $ip_address;
$tmp_count = count($tmp_array_ip_addr);
$fix_ip_addr = $tmp_array_ip_addr[0];
for($i = 1; $i < ($tmp_count - $last_point_number); $i++)
$fix_ip_addr .= "." . $tmp_array_ip_addr[$i];
}
else
{
$fix_ip_addr = false;
}
return($fix_ip_addr);
}
function is_bot($ip_address)
{
$list_bots = array("#bing#", "#babylon#", "#search#", "#aol#", "#voila#", "#incredimail#", "#ia[_-]?archiver#", "#ask#", "#teoma#", "#spider#", "#exabot#", "#thumbnails#", "#gamespy#", "#gigabot#", "#google#", "#grub#", "#inktomi#", "#slurp#", "#msnbot#", "#scooter#", "#altavista#", "#w3c[_-]?validator#", "#yahoo#", "#yandex#");
$n = count($list_bots);
/*
* C'est l'adresse ip filtrée
* de ma propre connexion
* Internet, car il semble
* que quelqu'un
* ait choisi comme reverse,
* un nom de bot.
*/
$permitted_bots = array('82.225.74');
if(empty($ip_address))
return(false);
$fix_address = filtered_address($ip_address);
$url = gethostbyaddr($ip_address);
if(in_array($fix_address, $permitted_bots))
return(false);
if($url !== false)
{
if($url != $ip_address)
{
$url = strtolower($url);
for($i = 0; $i < $n; $i++)
if(preg_match($list_bots[$i], $url))
break;
if($i < $n)
{
return(true);
}
else
return(false);
}
else
return(false);
}
else
return(false);
}
--------------------------------------------------------------------------------------