Unbekannte und gesperrte IP-Adressen blocken

qsrs

Erfahrenes Mitglied
Hallo,

ich habe ein Skript, mit welchem ich IP-Adressen von Besuchern sperren möchte. Ich habe dazu IP-Adressen und IP-Adressbereiche in einer Datenbank gespeichert. Die IP-Adressen können den Status 'locked' oder auch 'unlocked' besitzen. Dann gibt es im System (im Gesamtskript) zwei Modi, einmal 'Unbekannte IP-Adressen sperren' und 'Unbekannte IP-Adressen zulassen'. Im Modus 'Unbekannte IP-Adressen sperren' sollen alle geblockt werden, die nicht in der Liste sind, und auch die, welche vorhanden sind aber auf 'locked' stehen. In meinem folgenden Skript lasse ich statt einer Aktion erst einmal nur mit echo 'Forbidden' ausgeben. Das wird jedoch auch dann ausgegeben, wenn die IP-Adresse oder der IP-Adressbereich in der Liste ist, und auf unlocked steht. Was mache ich falsch:

PHP:
elseif ($array1[firewall_status] == "deny_unknown") {
 $this_ip = $_SERVER["REMOTE_ADDR"];
 $this_ip_long = ip2long ($this_ip);
 $query8 = mysql_query ("SELECT `ip_address_one`, `ip_address_two` FROM `$dbtable13` WHERE `ip_address_type` = 'ip_address_range' AND `ip_address_status` = 'unlocked'");
 while ($ip = mysql_fetch_object ($query8)) {
  if (($this_ip_long >= ip2long ($ip->ip_address_one)) && ($this_ip_long <= ip2long ($ip->ip_address_two))) {
   if ($this_ip != $_SERVER["SERVER_ADDR"]) {
    }
   }
  else {
   echo "Forbidden";
   }
  }
 $query9 = mysql_query ("SELECT `ip_address_one` FROM `$dbtable13` WHERE `ip_address_type` = 'ip_address' AND `ip_address_status` = 'unlocked'");
 while ($ip2 = mysql_fetch_object ($query9)) {
  if (($this_ip_long == ip2long ($ip2->ip_address_one))) {
   if ($this_ip != $_SERVER["SERVER_ADDR"]) {  
    }
   }
  else {
   echo "Forbidden";
   }
  }
 }
 
Hi,

also auf den ersten Blick entdecke ich kein Fehler, welches "Forbidden" wird denn von den beiden ausgegeben? So kannst du mal den Fehler eingrenzen.
 
Hallo und danke für die Antwort. Es werden beide Forbidden ausgegeben. Das erste einmal, das zweite so oft, wie es Einträge in meiner Datenbank gibt. Nur nicht für die, welche auf locked stehen, sondern für die, welche auf unlocked stehen. Also wohl genau anders herum.
 
Naja.. du sagst ja $
Code:
query9 = mysql_query ("SELECT `ip_address_one` FROM `$dbtable13` WHERE `ip_address_type` = 'ip_address' AND `ip_address_status` = 'unlocked'");
, also alle die die auf "unlocked" stehen. Wenn du alle die willst die auf "locked" stehen dann so:
Code:
$query9 = mysql_query ("SELECT `ip_address_one` FROM `$dbtable13` WHERE `ip_address_type` = 'ip_address' AND `ip_address_status` = 'locked'");
 
Das hatte ich auch schon versucht. Das war es leider nicht. Ich möchte schließlich ja auch alle, die auf unlocked stehen. Die nicht auf unlocked stehen oder nicht in der Liste vorhanden sind, sollen geblockt werden.
 
Zurück