Jaja, ganz tolles Plugin, aber wie das so ist mit PHP, schaut man besser über fremden Code drüber, bevor man ihn einsetzt. Folgender Code wird verwendet, um festzustellen, ob eine IP in einem Adressbereich liegt.
if($c[0] >= $a[0] && $c[0] <= $b[0]){
if($c[1] >= $a[1] && $c[1] <= $b[1]){
if($c[2] >= $a[2] && $c[2] <= $b[2]){
if($c[3] >= $a[3] && $c[3] <= $b[3]){
die(zurueckzensur_zensur_message());
}
}
}
}
$A, $b und $c sind dabei via explode getrennte IP-Adressen (also ein 4-Array mit jeweils einem IPv4-Tupel den Tupel-Komponenten als Elemente). Nehmen wir nun mal den Adressbereich der Staatsregierung Sachsen:
193.159.218.0-193.159.219.191
In diesem Range ist die Adresse 193.159.218.200 enthalten. Das Plugin wird diese IP jedoch nicht erkennen. Eine etwas sauberere Feststellung, ob eine IP in einem Adressbereich liegt wäre:
$a = $a[0] << 24 + $a[1] << 16 + $a[2] << 8 + $a[3]; $b = $b[0] << 24 + $b[1] << 16 + $b[2] << 8 + $b[3]; $c = $c[0] << 24 + $c[1] << 16 + $c[2] << 8 + $c[3]; if (($a <= $c) && ($c <= $b)) die(zurueckzensur_zensur_message());
Ich stelle diesen Code zur Diskussion. Gegenstimmen?
Update: Ich habe die Multiplikationen noch durch shifts ersetzt.
Ich kann ja kein PHP, aber wie wär’s mit http://us3.php.net/manual/en/function.ip2long.php
echo is_in_range(‘193.159.218.200′) ? ‘ja’:'nein’;
function is_in_range ($ip) {
$range_1 = ip2long(‘193.159.218.0′);
$range_2 = ip2long(‘193.159.219.191′);
$ip = ip2long($ip);
return $ip >= $range_1 && $ip <= $range_2;
}
kommt aufs gleiche hinaus, ist natuerlich deutlich schoener. In den kommentaren zu der hilfeseite findet man auch eine ipv6-kompatible variante.