IP Adresse auf Gültigkeit prüfen

Heute wollte ich mal eingegebene IP Adressen auf Ihre Gültigkeit prüfe. Das ist an sich gar nicht so schwer. Theoretisch sind da ja nur wenige Regeln zu beachten. Eine IP Adresse darf...
  • ..nur aus zahlen und Punkten bestehen
  • ..nur 3 Punkte haben
  • ..bei jeden „Block" maximal 255 drin stehen haben


Das war es auch schon. Einfache Regeln ohne großes tam tam. Das ganze wollte ich eigentlich mit regulären Ausdruck absuchen lassen, aber das scheint alles nicht so gut zu gehen wie ich es gerne hätte 🙂 .

Dann starten wir mal:
<code>$IP_Adress=$_REQUEST["ip_address"];
$IP_Error="";
$IP_Array=explode(".", $IP_Adress);
if(count($IP_Array)!=4 or array_key_exists("",$IP_Array)){
$IP_Error.="Die IP Adresse muss 4 Werte (1-255) durch ein Punkt getrennt haben.<br>";
}</code>

Damit haben wir die Variablen deklariert und die ersten Checks gemacht. Damit wissen wir das das Array 4 Elemente hat und keiner der Segmente leer ist.

<code>if(empty($IP_Error)){
for($i=0; $i<count($IP_Array); $i++){
$Segment=$i+1;
if(!is_numeric($IP_Array[$i])){
$IP_Error.="IP Adresse Segment ".$Segment." (".$IP_Array[$i].") ist nicht numerisch.<br>";
}
if($IP_Array[$i]>255) {
$IP_Error.="IP Adresse Segment ".$Segment." (".$IP_Array[$i].") ist gösser als 255.<br>";
}
}
}</code>

Nur wenn in der oberen if Abfrage kein Fehler drin war, dann gehts in die for Schleife. Theoretisch kann man alles zusammen durchlaufen lassen, aber das bringt nur mehr Fehler, wenn der User totalen Schmull eingegeben hat.
In der for Schleife prüfen wir dann ob die einzelnen Segmente Zahlen sind und ob die über 255 liegen. Dadurch haben wir auch den letzten Check abgearbeitet. Hoffe es bringt euch was. Hier nochmal der ganze Code:
<code>$IP_Adress=$_REQUEST["ip_address"];
$IP_Error="";
$IP_Array=explode(".", $IP_Adress);
if(count($IP_Array)!=4 or array_key_exists("",$IP_Array)){
$IP_Error.="Die IP Adresse muss 4 Werte (1-255) durch ein Punkt getrennt haben.<br>";
}
if(empty($IP_Error)){
for($i=0; $i<count($IP_Array); $i++){
$Segment=$i+1;
if(!is_numeric($IP_Array[$i])){
$IP_Error.="IP Adresse Segment ".$Segment." (".$IP_Array[$i].") ist nicht numerisch.<br>";
}
if($IP_Array[$i]>255) {
$IP_Error.="IP Adresse Segment ".$Segment." (".$IP_Array[$i].") ist gösser als 255.<br>";
}
}
}</code>

3 Reaktionen zu “IP Adresse auf Gültigkeit prüfen

  1. Hallo,

    Ich finde das einen guten Ansatz zur Valiedierung von IP Addressen, aber es gibt eben wahrscheinlich schon sehr viele solche Lösungen.

    Zuerst aber einmal ein Link, zu einem sehr guten Tutorial, betreffend den Regulären Ausdrücke: http://regexp-evaluator.de/tutorial/

    Aber auf PHP.net gibt es eine gute Lösung: http://php.net/manual/de/function.ip2long.php
    Einfach das Beispiel #3 IP-Validierung studieren, dann sollte es schon ein bisschen klarer werden.

  2. Das Tutorial ist in der Tat sehr gut. Das Beispiel 3 ist auch genau das was ich gesucht hatte, aber leider nicht gefunden. Hatte auch die Seite überflogen gehabt, aber es wohl übersehen 😀 . Die 2 Lösungen sind aber schon sehr verschieden, weil bei meiner auch genaue Fehler ausgegeben werden und bei der anderen halt nur die Prüfung gemacht wird, ob das Käse ist was da eingegeben wurde.

    Bei dem was ich brauchte, wäre das aber vollkommen ausreichend gewesen. Danke 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.