Ich habe mir eine Funktion erstellt, die eine IP-Adresse in die entsprechende IP-Dezimalzahl umrechnet bzw. umgekehrt.
Das Skript funktioniert fehlerfrei, aber vielleicht kann man an der Syntax noch ein wenig tunen. Hat jemand Vorschläge?
Das Skript funktioniert fehlerfrei, aber vielleicht kann man an der Syntax noch ein wenig tunen. Hat jemand Vorschläge?
Code:
<? function ipconvert($ip) { // Rechnet IP-Adresse in IP-Dezimalzahl um bzw. umgekehrt // // Author: hand // Date: Jan. 2002 // // Aufruf ipconvert("1.1.1.1") liefert Ergebnis 16843009 // ipconvert("16843009") liefert Ergebnis 1.1.1.1 // ipconvert("1.1.1.0/16") liefert Ergebnis 16842752@16908287 // entspricht: 1.1.0.0 - 1.1.255.255 // // Seperator für den Fall der Angabe 0/8, 0/16, 0/32 $seper = "@"; $exp = explode('.',$ip); if ($exp[0]<=255 && $exp[1]<=255 && $exp[2]<=255 && ($exp[3]<=255 || strpos($exp[3],'0/')) && preg_match("!^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).(([0-9]{1,3})|(0/32)|(0/16)|(0/8))$!",$ip)) { switch ($exp[3]) { case "0/32": $resf = $exp[0]*pow(256,3) + $exp[1]*pow(256,2) + $exp[2]*256; $resb = $resf + 255*pow(256,0); $resb = $seper . $resb; break; case "0/16": $resf = $exp[0]*pow(256,3) + $exp[1]*pow(256,2); $resb = $resf + 255*pow(256,0) + 255*pow(256,1); $resb = $seper . $resb; break; case "0/8": $resf = $exp[0]*pow(256,3); $resb = $resf + 255*pow(256,0) + 255*pow(256,1) + 255*pow(256,2); $resb = $seper . $resb; break; default: $resf = $exp[0] * pow(256,3) + $exp[1] * pow(256,2) + $exp[2] * 256 + $exp[3]; } } else { $exp = explode($seper,$ip); if ($exp[0] <= (pow(256,4)-1) && preg_match("!^([0-9]{1,10})$!",$exp[0])) { $ip0 = intval(( $exp[0] )/pow(256,3)); $ip1 = intval(( $exp[0] - $ip0*pow(256,3) )/pow(256,2)); $ip2 = intval(( $exp[0] - $ip0*pow(256,3) - $ip1*pow(256,2) )/pow(256,1)); $ip3 = intval(( $exp[0] - $ip0*pow(256,3) - $ip1*pow(256,2) - $ip2*pow(256,1) )%pow(256,1)); switch ($exp[1] - $exp[0]) { case (pow(256,1) - 1): $resf = "$ip0.$ip1.$ip2.0/32"; break; case (pow(256,2) - 1): $resf = "$ip0.$ip1.$ip2.0/16"; break; case (pow(256,3) - 1): $resf = "$ip0.$ip1.$ip2.0/8"; break; default: $resf = "$ip0.$ip1.$ip2.$ip3"; } } } return "${resf}${resb}"; } print "$ip -> ". ipconvert($ip). " -> " .ipconvert(ipconvert($ip)); ?>
Kommentar