Page 1 sur 1

Aide pour une fonction scan d'IP

Posté : 27 juil. 2005, 14:02
par VaN
Bonjour,
voila, il faut que je crée une fonction qui vérifie l'IP qui est en train de lire la page en cours.

A partir d'ici, 2 solutions :

Si c'est l'IP d'un bot de moteur de recherche, return true,
sinon, return false.

Il faut egalement que elle puisse 'completer' des IP incompletes, enfin plutot prendre en compte des fourchettes d'IP incompletes, par exemple 192.168.0.X

Je n'ai aucune idée de la maniere de monter cette fonction, auriez vous des conseils ?

Posté : 27 juil. 2005, 14:05
par mere-teresa
PHP5 ?

Posté : 27 juil. 2005, 14:09
par VaN
euh je sais pas vraiment. qu'est ce que cela va changer ?

Posté : 27 juil. 2005, 14:18
par mere-teresa

Posté : 27 juil. 2005, 14:30
par VaN
ok, j'imagine que ça pourrait me servir :
<?php
function is_blacklisted($ip) {
   $dnsbl_check=array("bl.spamcop.net",
                       "relays.osirusoft.com",
                       "list.dsbl.org",
                       "sbl.spamhaus.org");
   if ($ip) {
       $quads=explode(".",$ip);
       $rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads[0];
       for ($i=0; $i<count($dnsbl_check); $i++) {
           if (checkdnsrr($rip.".".$dnsbl_check[$i] . '.',"A")) {
               $listed.=$dnsbl_check[$i]." ";
           }
         }
       if ($listed) { return $listed; } else { return FALSE; }
   }
}
?>
en changeant le tableau de dns par les ip de bot (que je ne sais pas ou trouver). Il me reste le probleme des fourchette d'Ip a regler.

Posté : 27 juil. 2005, 15:12
par VaN
ou trouver une liste des IP de bot des moteurs de recherche ? une recherche sur google ne me donne rien de concluant : /

Posté : 27 juil. 2005, 16:12
par VaN
je viens de trouver les adresses des googlebots, du type 209.185.253.X

comment faire pour que toutes les adresses de ce type rentre dans ma fonction ?
<?php
$dnsbl_check=array("209.185.253."); 
?>

Posté : 27 juil. 2005, 16:38
par VaN
je n'arrive pas à me faire comprendre ou ce que je demande est impossible ?

Posté : 27 juil. 2005, 16:42
par mere-teresa
Essaie avec le is_in_array

Posté : 27 juil. 2005, 17:00
par VaN
je viens de regarder la dox, c'est pas mal effectivement. Mais il faut surtout que j'arrive a regler ce probleme d'IP incomplete :
<?php

function get_ip() 
{
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
	{
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    elseif(isset($_SERVER['HTTP_CLIENT_IP'])) 
	{
        $ip  = $_SERVER['HTTP_CLIENT_IP'];
    }
    else 
	{
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip; 
}
$ip = get_ip();

$os = array ("209.185.253.X", "66.196.90.X", "66.196.65.38");
  if (in_array ("$ip", $os)) {
   echo "adresse de bot";
  }
  else
  {
  echo "adresse normale";
  }

//echo $ip;


?> 
j'aimerais enlever les X ds le tableau d'IP, et faire en sorte que toute IP commençant par ça soit comptabilisée.

Posté : 27 juil. 2005, 18:00
par VaN
bon je pense avoir réussi à peu près ce que je voulais faire, voici le code pour ceux que ça pourraient interesser :
<?php
// fonction de recuperation de l'IP parseuse
function get_ip() 
{
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
	{
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    elseif(isset($_SERVER['HTTP_CLIENT_IP'])) 
	{
        $ip  = $_SERVER['HTTP_CLIENT_IP'];
    }
    else 
	{
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip; 
}
$ip = get_ip();


//fonction de test IP BOT ou non
function is_bot($ip)
{
	$string = $ip;

	if (
	eregi('209.185.253.', $string)	// Google Bot
	||
	eregi('66.196.90.', $string) // Inktomi Slurp Bot
	||
	eregi('66.196.7', $string) // Inktomi Slurp Bot
	||
	eregi('65.54.164.', $string) // MSN Bot
	||
	eregi('66.28.250.', $string) // Alexa Bot
	||
	eregi('66.77.73.', $string) // Fast Bot
	||
	($ip == "66.196.65.38")
	)
	
	{
		return true;
	}
	else
	{
		return false;
	}	
}

// test sur l'IP recupérée
$var = is_bot($ip);
if ($var == true)
{
	// IP de bot
	echo "bot's ip";
}
else
{
	// IP normale
	echo "use's ip";
}

?> 

Posté : 27 juil. 2005, 18:04
par kmeleon
Tu peux même mettre un pti [Résolu] (ok je soule avec ca, mais bon...) :D