Aide pour une fonction scan d'IP

VaN
Mammouth du PHP | 1107 Messages

27 juil. 2005, 14:02

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 juil. 2005, 14:05

PHP5 ?

VaN
Mammouth du PHP | 1107 Messages

27 juil. 2005, 14:09

euh je sais pas vraiment. qu'est ce que cela va changer ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 juil. 2005, 14:18

Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

VaN
Mammouth du PHP | 1107 Messages

27 juil. 2005, 14:30

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.

VaN
Mammouth du PHP | 1107 Messages

27 juil. 2005, 15:12

ou trouver une liste des IP de bot des moteurs de recherche ? une recherche sur google ne me donne rien de concluant : /

VaN
Mammouth du PHP | 1107 Messages

27 juil. 2005, 16:12

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."); 
?>

VaN
Mammouth du PHP | 1107 Messages

27 juil. 2005, 16:38

je n'arrive pas à me faire comprendre ou ce que je demande est impossible ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 juil. 2005, 16:42

Essaie avec le is_in_array

VaN
Mammouth du PHP | 1107 Messages

27 juil. 2005, 17:00

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.

VaN
Mammouth du PHP | 1107 Messages

27 juil. 2005, 18:00

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";
}

?> 

Eléphant du PHP | 132 Messages

27 juil. 2005, 18:04

Tu peux même mettre un pti [Résolu] (ok je soule avec ca, mais bon...) :D
:: Kmeleon ::
CanalPC - La webradio communautaire :: Ecrivez/Enregistrez/Ecoutez !