Alexander Rehbein: Check: IP in IP-Ranges?

Beitrag lesen

Hallo,

wie kann ich am einfachsten und am schonensten überprüfen, ob eine bestimmte IP in einer bestimmten IP-Range ist?

Ich habe dabei ca. 200-300 Ranges in einer DB gespeichert und muss diese auf eine IP hin ueberprüfen.

Als einfachstes dachte ich mir, ich könnte die IP-Grenzen (der Ranges) in 32-Bit-Zahlen umwandeln und die IP auch und dann ueber einfache größer/kleiner-Beziehungen feststellen, ob ein Fall eintritt:

// -------------------------------------------------------------------------------

// User muss gecheckt werden
    $ip = abs(ip2long($ip));

$query = 'SELECT ip_start, ip_end FROM al_iprange WHERE ('.$ip.' >= ip_start AND '.$ip.' <= ip_end)';

if ($debug_mode) { echo '<span class="debug">'.$query.'</span><br><br>'; }

$db_query = mysql_query($query);

if (mysql_num_rows($db_query) > 0) {
      // In einer verbotenen Range...
      echo '<h1>RANGE verboten</h1>';
      } else {
        echo '<h1>RANGE erlaubt</h1>';
        }

// -------------------------------------------------------------------------------

Aber irgendwie scheint das nicht zu klappen :( Kann mich jemand korrigieren, oder mir eine einfachere und/oder bessere Lösung nennen?

Vielen Dank im Voraus und schöne Grüße
Alexander Rehbein