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