Que pensez-vous de cette détection des bots ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par ortolojf, 1 Juillet 2012.

  1. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 567
    J'aime reçus:
    31
    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);
    }

    --------------------------------------------------------------------------------------
     
  2. _Soul
    _Soul WRInaute impliqué
    Inscrit:
    26 Avril 2011
    Messages:
    625
    J'aime reçus:
    0
    J'utilise Zennoposter pour faire mes bots, ça émule un navigateur, dans la nouvelle version, tu peux changer le referer, l'os, le navigateur et émuler les frappes au clavier.

    Le seul bot que tu peux détecter c'est le curl, ça n'utilise pas le js donc tu peux faire de l'ajax pour faire tes stats mais c'est très basique.

    En gros si le gars et un minimum fut fut tu sauras jamais que c'est un bot, et c'est bien fait pour. Sous perl ta une librairie simulant un navigateur, en php tu peux utiliser IE...

    Quoi que t'utilise ça ne marchera pas, mes robots ne laissent aucun footprint et c'est bien pour ça que je passe autant de temps dessus.
     
  3. Rogers
    Rogers WRInaute impliqué
    Inscrit:
    24 Janvier 2003
    Messages:
    673
    J'aime reçus:
    0
    Je vais poser la question con du jour, à quoi ça sert de détecter les bots ?
     
  4. Protée
    Protée WRInaute occasionnel
    Inscrit:
    27 Décembre 2006
    Messages:
    301
    J'aime reçus:
    0
    Cela permet de les capturer, voyons !
     
  5. Rogers
    Rogers WRInaute impliqué
    Inscrit:
    24 Janvier 2003
    Messages:
    673
    J'aime reçus:
    0
    LOL, pour quoi faire ?
     
  6. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    De l'élevage :D

    @ortolojf -> balise [ Code ] BBCode c'est pas pour faire jolie sur l'interface c'est pour que les sujets et le code soit lisibles merci.
     
  7. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 567
    J'aime reçus:
    31

    Bonjour Rogers

    C'est pour effacer automatiquement de ma table MySQL CONNEXION, les adresses ip qui sont enregistrées dans la table des bots BOT_ADDRESS.

    Je suis obligé, de les enregistrer avant de les enlever, pour que vis-à-vis des bots, le site se comporte de la même manière, que pour les visiteurs habituels.

    Ainsi, je pourrai faire des stats sur mes visites et visiteurs, sans les prendre en compte. ;)

    Je sais que je suis un nul pour détecter les bots, mais j'ai essayé de mettre surr pieds une fonction pour celà.

    Par ailleurs, j'ai remplacé l'appel à la fonction gethostbyname() , qui est trop lente, par celle-ci :

    ------------------------------------------------------------------

    Code:
    function get_host($ip_address)
    {
        $ptr = implode(".", array_reverse(explode(".", $ip_address))) . ".in-addr.arpa.";
    
        $array_host = dns_get_record($ptr, DNS_PTR);
    
        if($array_host != null)
        {
              for($i = 0; $i < count($array_host); $i++)
             {
                    if(!empty($array_host[$i]['target']))
                    {
                          return($array_host[$i]['target']);
                    }  
             }
        }
    
        return(false);
    }
    
    ---------------------------------------------------------------------------

    J'ai tiré cette fonction d'un commentaire dans la rubrique sur la fonction gethostbyname(), dans le PHP Manual,

    Il semblerait, qu'elle évite le long temps d'attente, dans le cas où la fonction gethostbyname() , ne trouve pas le hostname.

    Bien amicalement.

    Jean François Ortolo
     
  8. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 567
    J'aime reçus:
    31
    Rebonsoir

    J'ai réussi à trouver dans un site, plusde 1000 adresses ip de bots de moteurs de recherche, sous la forme de 4 nombres ( ip complètes ), ou les trois premiers nombres ( ip filtrées ).

    J'ai inséré les ip en 4 nombres, à ma table MySQL BOT_ADDRESS, et les ip en trois nombres, à une table MySQL que j'ai créée pour l'occasion, de la forme :

    BOT_IP3_ADDRESS(IP_ADDRESS VARCHAR(100) NOT NULL PRIMARY KEY DEFAULT '');

    Les adresses ip, n'existent qu'en un seul exemplaire dans ces deux tables MySQL, à cause du fait que ce sont des primary key.


    Ensuite,j'ai rajouté sur mon site, lors de chaque premier chargement avec une requête http, les instructions suivantes, pour éliminer systématiquement de ma table CONNEXION, les adresses des bots :

    et :


    Donc, aucune addresse de bots de moteurs, ne reste dans ma table CONNEXION.

    D'autre part, dans cette table MySQL CONNEXION, le champ DRAPEAU=1 quand Javascript était activé lors de la visite, et pas désactivé juste avant la fin de la visite.

    Je dois dire, qu'il y a très peu de visites avec DRAPEAU=0, ce qui était prévisible.

    J'ai deux champs de type TIMESTAMP : MAINTENANT, mis à jour avec NOW() durant la même visite à chaque chargement de page, et DEBUT, qui prend la valeur NOW() au tout début de la visite.

    Quant DRAPEAU=0 , si MAINTENANT=DEBUT , celà peut être, soit un bot, soit un visiteur avec Javascript désactivé, qui n'a chargé qu'une seule page.

    Cependant, je logue le hostname de chaque visites dans cette table MySQL, depuis quelques minutes.

    Donc, en général, les hostnames de visiteurs réels, sont alimentés, alors que pour certains bots, ils ne le sont pas ( chaîne vide quand l'ip n'a pas de reverse ).

    Donc, à la limite, je pourrai alimenter deux fichiers : L'un avec les adresses ip et hostnames vides, et l'autre comportant les adresses ip et les hostnames non vides.

    Je pourrai ainsi ( le nombre d'enregistrements est faible ), consulter manuellement ce deuxième fichier, pour savoir si les hostnames, semblent correspondre à des bots de moteur de recherche, et dans ce cas, ajouter ces adresses ip comme adresses de bot, à l'une ou à l'autre de ces deux tables de bots.

    A part çà, pour ce qui est d'évaluer mon trafic de manière automatique, c'est délicat, mais si le champ DRAPEAU=1, je pourrais,à la rigueur, évaluer automatiquement, si des adreses ip similaires, se présentent dans des délais rapprochés, ce qui indique qu'elles ne constituent qu'une seule visite.

    Je pense, que le seul critère, pour évaluer si une adresse ip est fixe ou variable, serait d'évaluer la diférence entre MAINTENANT et DEBUT, que DRAPEAU soit égal à 0 ou 1.

    Si cette différence est grande, l'adresse ip est fixe.

    Sinon, peut-être une visite très courte, dans ce cas, le critère discriminant, serait si une adrese ip similaire apparaît peut de temps après. Mais celà aussi peut être un hasard... ;)

    Merci beaucoup de vos avis et suggestions.

    Bien amicalement.

    Jean François Ortolo
     
Chargement...
Similar Threads - pensez détection bots Forum Date
Que pensez vous de "le-seo-pour-tous.org" ? Débuter en référencement 10 Mai 2022
que pensez vous de mon site Demandes d'avis et de conseils sur vos sites 28 Juillet 2021
WordPress Que pensez-vous de ce site ? Demandes d'avis et de conseils sur vos sites 1 Mai 2021
Que pensez-vous de ce site ? Demandes d'avis et de conseils sur vos sites 10 Février 2021
Que pensez vous de Annuaire Web France Demandes d'avis et de conseils sur vos sites 21 Février 2020
Que pensez-vous du système de monétisation wordpress premium ? Monétisation d'un site web 2 Novembre 2019
Serveurs et NDD en fonction du pays ? qu'en pensez-vous ? Débuter en référencement 25 Septembre 2019
Que pensez vous du logiciel Upseo Référencement Google 25 Août 2019
Que pensez-vous de mon site de cours d'anglais ? Demandes d'avis et de conseils sur vos sites 22 Août 2019
Pensez-vous que google s'intéresse toujours à l'ux ? Référencement Google 12 Juillet 2019
Que pensez-vous de mon site ? Demandes d'avis et de conseils sur vos sites 4 Juillet 2019
WordPress Bonjour, qu'est ce que vous pensez de mon site (non ecommerce, infopreneur...) Rédaction web et référencement 20 Juin 2019
Que pensez-vous de ce systeme de cache? Développement d'un site Web ou d'une appli mobile 23 Janvier 2019
Chutes de trafic suite à Medic Update, que pensez-vous de mon site ? Demandes d'avis et de conseils sur vos sites 3 Octobre 2018
Que pensez-vous de mon site ? Demandes d'avis et de conseils sur vos sites 31 Août 2018
Que pensez-vous de l'extension .restaurant ? Noms de domaine et référencement 26 Février 2018
Que pensez-vous de ma procédure ? Demandes d'avis et de conseils sur vos sites 2 Novembre 2017
Https://lejeudutour.fr - qu'en pensez vous ? Demandes d'avis et de conseils sur vos sites 5 Juillet 2017
Que pensez-vous de mon site ? Débuter en référencement 16 Janvier 2017
Les forums en dofollow vous en pensez quoi ? Netlinking, backlinks, liens et redirections 9 Janvier 2017