2009-10-30 15 views
-3
PHP & MySQL

Je suis désireux de faire quelque chose de similaire à ceci: Matching an IP to a CIDR mask in PHP 5?Filtrage IP/CORR masque hôte avec

Sauf, je veux stocker une liste des IP/masques Rejeté dans une table MySQL et vérifiez un match.

Tout comme l'exemple dans le lien, quelque chose comme '10 .2.0.0/16 'serait une ligne dans la table, puis je veux vérifier l'adresse IP de l'utilisateur actuel ($ _SERVER [' REMOTE_ADDR ']) et vérifiez si cela correspond ou non.

Merci beaucoup :)

+3

Seams comme vous le savez très bien ce que vous voulez et essayez de avoir fait tes devoirs ... Je ne vois vraiment pas de question là-bas. – Frankie

+0

@ShaunO: Alors, quelle est votre question? Quelle partie avez-vous des difficultés avec? S'il vous plaît modifier la question pour nous le faire savoir. –

+0

-1 pour "Faire mon travail/devoirs pour moi, kthxbai" – Stephen

Répondre

3

Quelques options sur les tables - vous pouvez stocker l'adresse IP en tant que chaîne lisible par un humain (4 octets en pointillés) ou dans son long numéro natif utilisé par cidr_match. En supposant que nous avons pris avec lisible par l'homme (à réutiliser cidr_match de la page liée)

function testIP($ip=$_SERVER['REMOTE_ADDR']) { 
    //Returns TRUE - valid, FALSE - denied 

    /* Get the data from the database and return it in rows 
    * this could be real-time retrieved, or pulled into an array 
    * first 
    * assumes: deny_ranges(ip VARCHAR(45) not null,mask INT not null default 0) 
    * eg: $denyips= get "SELECT ip,mask FROM deny_ranges" from database 
    */ 

    foreach($denyips as $row) { 
     if ($row["mask"]==0) { 
      //No need to use overhead of CIDR_MATCH 
      //Exact match - reject 
      if ($row["ip"]==$ip) return false; 
     } elseif (cidr_match($ip,$row["ip"]."/".$row["mask"])==true) { 
      //In denied range - reject 
      return false; 
     } 
    } 
    //Got through all rejected ranges+ips - it's good 
    return true; 
} 

(Vous pouvez trouver cird_match sur l'autre poste)