Anti aspirateur: ne pas bloquer Google
33 messages
• Page 1 sur 3 • 1, 2, 3
- ajax
- WRInaute occasionnel

- Messages: 292
- Inscription: 20 Mar 2006
Anti aspirateur: ne pas bloquer Google
Bonjour
J'ai trouvé sur wri ce bout de code qui de manière classique compte les IP et les bloque si les connexions sont trop nombreuse, mais qui normalement permet à Google d'éviter d'être bloqué.
Ici on peut voir que Googlebot/2.1 n'est pas bloqué, mais je ne sais pas comment modifier légèrement cette ligne pour y ajouter Mediapartners-Google/2.1.
---------------------------
J'ai trouvé sur wri ce bout de code qui de manière classique compte les IP et les bloque si les connexions sont trop nombreuse, mais qui normalement permet à Google d'éviter d'être bloqué.
Ici on peut voir que Googlebot/2.1 n'est pas bloqué, mais je ne sais pas comment modifier légèrement cette ligne pour y ajouter Mediapartners-Google/2.1.
---------------------------
- Code: Tout sélectionner
function googlebot($agent) {
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
$nomnav = strtoupper($tab[1]);
if ($nomnav == "Googlebot/2.1") { $rel = "1"; }
return($rel);
}
$refe = googlebot($HTTP_USER_AGENT);
if ($refe == "1") { $Max = 500; } else { $Max = 35; }
- achaternet
- WRInaute occasionnel

- Messages: 256
- Inscription: 11 Fév 2003
J ai enfin trouvé la solution ultime, radicale, efficace, et qui ne bloque pas les bots et bloque n importe quel aspirateur!
Divers scripts testés, mais toujours des inconveniants.
Mais surtout, si l aspi ouvre de nombreux pages simultanées, le script est OUT, et il continue le pompage du reste du site
J ai créé moi meme un script qui bloque les bloques, et ca fonctionne du tonnerre.
Script en place depuis plus d un an sur un de mes sites et nickel.
Le projet encore en beta:
http://www.anti-aspirateur.com/
Concretement, je souhaite proteger une partie de mon code, mais vous faire profiter les webmaster de cette protection.
Pour l instant, cela ne fonctionne pas encore parfaitement pour vous autres, mais bientot operationnelle.
Sinon, je defis qui souhaite tenter d aspirer 30 pages rapidements, par exemple, depuis http://www.anti-aspirateur.com/test_aspi.php
faite vous passer pour qui vous voulez...
Je vous tiendrez au courant, la communauté wri de la finalisation de ce projet
Divers scripts testés, mais toujours des inconveniants.
Mais surtout, si l aspi ouvre de nombreux pages simultanées, le script est OUT, et il continue le pompage du reste du site
J ai créé moi meme un script qui bloque les bloques, et ca fonctionne du tonnerre.
Script en place depuis plus d un an sur un de mes sites et nickel.
Le projet encore en beta:
http://www.anti-aspirateur.com/
Concretement, je souhaite proteger une partie de mon code, mais vous faire profiter les webmaster de cette protection.
Pour l instant, cela ne fonctionne pas encore parfaitement pour vous autres, mais bientot operationnelle.
faite vous passer pour qui vous voulez...
Je vous tiendrez au courant, la communauté wri de la finalisation de ce projet
- achaternet
- WRInaute occasionnel

- Messages: 256
- Inscription: 11 Fév 2003
84.98.*.*; 25/06/2006 22:11:48;
http://www.anti-aspirateur.com/test_aspi.php?suiv=4
82.254.*.*; 25/06/2006 21:59:29;
http://www.anti-aspirateur.com/test_aspi.php?suiv=5
213.166.*.*; 25/06/2006 21:33:14;
http://www.anti-aspirateur.com/test_aspi.php?suiv=3
Ils se reconnaitront
Dernière édition par achaternet le Dim Juin 25, 2006 21:31, édité 1 fois.
- achaternet
- WRInaute occasionnel

- Messages: 256
- Inscription: 11 Fév 2003
Albert1 a écrit:tu prétends offrir un test ...
Oups
- ajax
- WRInaute occasionnel

- Messages: 292
- Inscription: 20 Mar 2006
rebirth a écrit:if ($nomnav == "Googlebot/2.1" || $nomnav == "CeQueTuVeuxMettre") { $rel = "1"; }
Je me permets de relancer. J'ai l'impression qu'il y a une erreur dans la condition car elle ne semble pas être prise en compte.
En gros, ce que je souhaite, c'est une valeur OU.
Je me demande aussi si à la place de Googlebot/2.1, il ne faut pas préciser: Googlebot/2.1 (+http://www.google.com/bot.html)
car je bloque toujours cet useragent: HTTP_USER_AGENT => Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Merci
Je mets tout le script (pris dans ce forum) si cela peut intéresser
- Code: Tout sélectionner
<?php
$to = xxx
$from = "xxx@xxx.com";
$dbhost = "localhost";
$dbuname = "xxx";
$dbpass = "xxx";
$dbname = "xxx";
function googlebot($agent) {
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
$nomnav = strtoupper($tab[1]);
if ($nomnav == "Googlebot/2.1" || $nomnav == "Mediapartners-Google/2.1") { $rel = "1"; }
return($rel);
}
$refe = googlebot($HTTP_USER_AGENT);
if ($refe == "1") { $Max = 200; } else { $Max = 25; }
$Vcpt = 0;
$Vdate = date("Y/m/d H:i");
$Vua = $HTTP_SERVER_VARS["HTTP_USER_AGENT"];
$Vip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
$Realtime = time();
$Limitime = $Realtime + 1200;
$dbic = mysql_connect($dbhost,$dbuname,$dbpass);
mysql_select_db($dbname);
if ($dbic <> 0)
{
// clean up old IP
mysql_query("DELETE FROM ip WHERE date <> '$Vdate'");
mysql_query("DELETE FROM ip_bl WHERE ltime < '$Realtime'");
// chercher si le visiteur est interdit
$res = mysql_query("SELECT ip FROM ip_bl WHERE ip='$Vip' AND ltime > '$Realtime' ");
while(list($ip) = mysql_fetch_row($res))
{
// Visiteur trouvé dans les IP interdites
mysql_free_result($res);
mysql_close($dbic);
die("Vous consultez trop rapidement les pages du site. Votre adresse IP est bloquée durant 20mn.");
header("HTTP/1.0 404 Not Found");
exit;
}
mysql_free_result($res);
// chercher si le visiteur est déjà passé
$res = mysql_query("SELECT id, ip, date, cpt FROM ip WHERE ip='$Vip'");
while(list($id, $ip, $date, $cpt) = mysql_fetch_row($res)) $Vcpt = $cpt;
mysql_free_result($res);
if ($Vcpt == 0) mysql_query("INSERT into ip (id, ua, ip, date, cpt) values ('', '$Vua', '$Vip', '$Vdate', '1')");
else
{
// Visiteur ayant déjà chargé des pages dans la même minute ==> +1 sur le compteur
mysql_query("UPDATE ip SET cpt=cpt+1 WHERE ip='$Vip'");
// si limite atteinte (25 pages php/min) ajouter dans la table des ip interdites.
if ($Vcpt >= $Max )
{
mysql_query("INSERT into ip_bl (id, ua, ip, date, cpt, ltime) values ('', '$Vua', '$Vip', '$Vdate', '$Vcpt', '$Limitime')");
$msg = "HTTP_SERVER_VARS:\n" ;
while (list ($key, $val) = each ($HTTP_SERVER_VARS)) $msg .= "$key => $val\n";
$msg = addslashes($msg);
eval("\$msg = "$msg";");
$msg = stripslashes($msg);
mail ("xxx@xxx.com", "[IP Interdite] $Vip - $Vdate", $msg, "From: banmaster@votre_domaine.tdl");
}
}
$VVcpt = round(((round (($Vcpt / ($Max + 1)) * 100)) / 100) * 100);
$Acpt = $Vcpt + 1;
mysql_close($dbic);
}
?>
- achaternet
- WRInaute occasionnel

- Messages: 256
- Inscription: 11 Fév 2003
Je ne suis pas un expert en expression reguliere, mais je vais essayer de te faire avancer
Les 3 agents de google:
Googlebot/2.1 (+http://www.google.com/bot.html)
Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)
Mediapartners-Google/2.1
$nomnav == "Googlebot/2.1" || $nomnav == "Mediapartners-Google/2.1")
L expression reguliere:
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
teste la presence de Googlebot/2.1
Du coup, le tableau qui en ressort ne donne pas le meme resultat du positionnement de gg2.1 et ainsi LE TEST EST DIFFERENT.
$nomnav = strtoupper($tab[1]);
Oui, mais selon le cas. Des fois, ca peut etre $tab[0] .
Essaie de tester non pas avec $tab[1], mais $tab[0] ,$tab[1] et $tab[2] au cas ou.
a l arrache là, genre:
$nomnav = strtoupper($tab[0]);
if ($nomnav == "Googlebot/2.1") { $rel = "1"; }
$nomnav = strtoupper($tab[1]);
if ($nomnav == "Googlebot/2.1") { $rel = "1"; }
$nomnav = strtoupper($tab[2]);
if ($nomnav == "Googlebot/2.1") { $rel = "1"; }
J espere t avoir fait progressé
Les 3 agents de google:
Googlebot/2.1 (+http://www.google.com/bot.html)
Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)
Mediapartners-Google/2.1
$nomnav == "Googlebot/2.1" || $nomnav == "Mediapartners-Google/2.1")
L expression reguliere:
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
teste la presence de Googlebot/2.1
Du coup, le tableau qui en ressort ne donne pas le meme resultat du positionnement de gg2.1 et ainsi LE TEST EST DIFFERENT.
$nomnav = strtoupper($tab[1]);
Oui, mais selon le cas. Des fois, ca peut etre $tab[0] .
Essaie de tester non pas avec $tab[1], mais $tab[0] ,$tab[1] et $tab[2] au cas ou.
a l arrache là, genre:
$nomnav = strtoupper($tab[0]);
if ($nomnav == "Googlebot/2.1") { $rel = "1"; }
$nomnav = strtoupper($tab[1]);
if ($nomnav == "Googlebot/2.1") { $rel = "1"; }
$nomnav = strtoupper($tab[2]);
if ($nomnav == "Googlebot/2.1") { $rel = "1"; }
J espere t avoir fait progressé
- ajax
- WRInaute occasionnel

- Messages: 292
- Inscription: 20 Mar 2006
Merci
Autrement dit:
function googlebot($agent) {
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
$nomnav = strtoupper($tab[0]);
if ($nomnav == "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)") { $rel = "1"; }
$nomnav = strtoupper($tab[1]);
if ($nomnav == "Mediapartners-Google/2.1") { $rel = "1"; }
$nomnav = strtoupper($tab[2]);
if ($nomnav == "Googlebot/2.1 (+http://www.google.com/bot.html) ") { $rel = "1"; }
return($rel);
}
Autrement dit:
function googlebot($agent) {
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
$nomnav = strtoupper($tab[0]);
if ($nomnav == "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)") { $rel = "1"; }
$nomnav = strtoupper($tab[1]);
if ($nomnav == "Mediapartners-Google/2.1") { $rel = "1"; }
$nomnav = strtoupper($tab[2]);
if ($nomnav == "Googlebot/2.1 (+http://www.google.com/bot.html) ") { $rel = "1"; }
return($rel);
}
- achaternet
- WRInaute occasionnel

- Messages: 256
- Inscription: 11 Fév 2003
Non, je ne pense pas:
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
Pour traduire:
On repere tout ce qui commence par:
- des lettres minuscules ou majuscule suivi
- d'1 slash suivi d'1 ou plusieurs chiffres suivi
- d 1 point suivi d'1 ou plusieurs chiffres et enfin suivi
- du reste ( pour simplifier)
Ainsi l expression "Googlebot/2.1" correspond a cela et c est ce que l on cherche.
Enfin, avec la fonction ereg, il distingue l expression cherchée du reste.
Regarde en detail http://fr.php.net/manual/fr/function.ereg.php
Apres d en deduira sur quel indice de ta table tester.
Sinon, toujours pas, pas grave, il suffit de te faire une page test
... et de tester
Plus precisement:
$agent="juste que c est pas google";
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
// Boucle foreach pour afficher tab[] et l indice correspondant.
$agent="Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)";
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
// Boucle foreach pour afficher tab[] et l indice correspondant.
$agent="Mediapartners-Google/2.1";
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
// Boucle foreach pour afficher tab[] et l indice correspondant.
$agent="Googlebot/2.1 (+http://www.google.com/bot.html) ";
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
// Boucle foreach pour afficher tab[] et l indice correspondant.
De la, direct, en fonction des agents et des indices resultant, tu saura quoi tester.
Ps: Pour foreach http://fr.php.net/manual/fr/control-str ... oreach.php
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
Pour traduire:
On repere tout ce qui commence par:
- des lettres minuscules ou majuscule suivi
- d'1 slash suivi d'1 ou plusieurs chiffres suivi
- d 1 point suivi d'1 ou plusieurs chiffres et enfin suivi
- du reste ( pour simplifier)
Ainsi l expression "Googlebot/2.1" correspond a cela et c est ce que l on cherche.
Enfin, avec la fonction ereg, il distingue l expression cherchée du reste.
Regarde en detail http://fr.php.net/manual/fr/function.ereg.php
Apres d en deduira sur quel indice de ta table tester.
Sinon, toujours pas, pas grave, il suffit de te faire une page test
... et de tester
Plus precisement:
$agent="juste que c est pas google";
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
// Boucle foreach pour afficher tab[] et l indice correspondant.
$agent="Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)";
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
// Boucle foreach pour afficher tab[] et l indice correspondant.
$agent="Mediapartners-Google/2.1";
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
// Boucle foreach pour afficher tab[] et l indice correspondant.
$agent="Googlebot/2.1 (+http://www.google.com/bot.html) ";
ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $agent, $tab);
// Boucle foreach pour afficher tab[] et l indice correspondant.
De la, direct, en fonction des agents et des indices resultant, tu saura quoi tester.
Ps: Pour foreach http://fr.php.net/manual/fr/control-str ... oreach.php
33 messages
• Page 1 sur 3 • 1, 2, 3
Lectures recommandées sur ce thème :
- Script anti-aspirateur et Google (et les autres...)
- anti-aspirateur
- Anti aspirateur URGENT ?
- mod_rewrite et anti aspirateur
- /!\ aspirateur de site et anti référencement ...
- .htaccess anti-aspirateur de site
- Script php Anti aspirateur.
- [Résolu] Pb htaccess anti-aspirateur email
- Anti aspirateur de site : une idée
- Mon script anti-aspirateur a blacklisté googlebot.
- La valse des rachats de sociétés par Google en mai/juin 2007 - 06-06-2007
- Google Pack s'enrichit de 2 nouveaux logiciels gratuits - 28-03-2007
- Google, dépassé dans la lutte contre le spam dans ses résultats ? - 15-02-2011
- Matt Cutts n'en fait-il pas un peu trop ? - 16-11-2009
- Google propose en option un lien pour supprimer un site des résultats - 23-09-2005
- Archive.org n'indexe plus rien depuis le 22 août 2008 ? - 19-11-2009
- Comment contrôler ses Sitelinks Google - 20-10-2007
- X-Robots-Tag : directive pour bloquer les robots dans l'entête HTTP : explications - 13-12-2007
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


