| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
ajax WRInaute impliqué

Inscrit le: 20 Mar 2006 Messages: 292
|
Posté le : Dim Juin 25, 2006 20:08 Sujet du message: 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.
---------------------------
| Code: |
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; } |
|
|
| |
|
 |
rebirth WRInaute passionné

Inscrit le: 18 Avr 2004 Messages: 906 Localisation: Paris, France
|
Posté le : Dim Juin 25, 2006 20:15 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
| if ($nomnav == "Googlebot/2.1" || $nomnav == "CeQueTuVeuxMettre") { $rel = "1"; } |
|
| |
|
 |
Zim' WRInaute passionné

Inscrit le: 27 Avr 2006 Messages: 804 Localisation: Euh... chez moi nulle part pour l'instant :-(
|
Posté le : Dim Juin 25, 2006 20:16 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
rajouter ceci peut etre:
if ($nomnav == "Mediapartners-Google/2.1") { $rel = "1"; }
posté en retard, son code est mieux mais le miens fonctionne aussi |
|
| |
|
 |
ajax WRInaute impliqué

Inscrit le: 20 Mar 2006 Messages: 292
|
Posté le : Dim Juin 25, 2006 20:30 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
| Merci, je teste cela de suite. |
|
| |
|
 |
Albert1 WRInaute passionné

Inscrit le: 23 Aoû 2005 Messages: 935 Localisation: Partout & Nulle part
|
Posté le : Dim Juin 25, 2006 20:44 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
et comme ça si notre ami qui utilise Httrack spoofe son User Agent il peut commettre ses méfaits en toutes tranquillité !
essaie donc Httrack, tu verras avec quelle facilité tu peux lui attribuer l'User Agent de ton choix ... |
|
| |
|
 |
ajax WRInaute impliqué

Inscrit le: 20 Mar 2006 Messages: 292
|
Posté le : Dim Juin 25, 2006 21:12 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
| Désolé, je n'ai pas de solution parfaite. |
|
| |
|
 |
achaternet WRInaute occasionnel

Inscrit le: 11 Fév 2003 Messages: 247 Localisation: France
|
Posté le : Dim Juin 25, 2006 21:27 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
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  |
|
| |
|
 |
ajax WRInaute impliqué

Inscrit le: 20 Mar 2006 Messages: 292
|
Posté le : Dim Juin 25, 2006 21:41 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
| le code serait le bienvenu |
|
| |
|
 |
achaternet WRInaute occasionnel

Inscrit le: 11 Fév 2003 Messages: 247 Localisation: France
|
Posté le : Dim Juin 25, 2006 22:02 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
Ils se reconnaitront 
Dernière édition par achaternet le Dim Juin 25, 2006 22:31; édité 1 fois |
|
| |
|
 |
Albert1 WRInaute passionné

Inscrit le: 23 Aoû 2005 Messages: 935 Localisation: Partout & Nulle part
|
Posté le : Dim Juin 25, 2006 22:24 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
tu prétends offrir un test et ensuite
tu affiches des adresses IP personnelles complètes et en clair (voir CNIL) sur la place publique !
tu es un bien étrange spécimen ... |
|
| |
|
 |
achaternet WRInaute occasionnel

Inscrit le: 11 Fév 2003 Messages: 247 Localisation: France
|
Posté le : Dim Juin 25, 2006 22:33 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
| Albert1 a écrit: |
| tu prétends offrir un test ... |
Oups , c etait en speed, on m attendait pour manger |
|
| |
|
 |
ajax WRInaute impliqué

Inscrit le: 20 Mar 2006 Messages: 292
|
Posté le : Lun Juin 26, 2006 11:40 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
| 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: |
<?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

Inscrit le: 11 Fév 2003 Messages: 247 Localisation: France
|
Posté le : Lun Juin 26, 2006 18:53 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
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é  |
|
| |
|
 |
ajax WRInaute impliqué

Inscrit le: 20 Mar 2006 Messages: 292
|
Posté le : Mar Juin 27, 2006 19:04 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
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);
} |
|
| |
|
 |
achaternet WRInaute occasionnel

Inscrit le: 11 Fév 2003 Messages: 247 Localisation: France
|
Posté le : Mar Juin 27, 2006 23:05 Sujet du message: Anti aspirateur: ne pas bloquer Google |
|
|
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-structures.foreach.php |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
Définitions :
|
|