2011年1月17日 星期一

轉換子網路遮罩格式

子網路遮罩有兩種表示方式,一種是IP格式,像是255.255.255.0,另一種簡寫是只有一個數值像是24,表示二進位中連續的1個數
Linux中大部分程式都支援兩種,不過也有例外像是/sbin/ip這個命令,一定要使用ip/mask來表示,於是就有了下面這個函數
P.S 在防呆上還不是很完美,不過加減用吧XD

<?php
function mask2dec($str){
$mask=explode('.',$str);
if(count($mask)!=4){
return false;
}
$dm=0;
for($n=0;$n<4;$n++){
$h=$mask[$n];
$a=(255 ^ $h);
for($m=0;$m<=8;$m++){
if($a===(pow(2,$m)-1)){
$m=(8-$m);
if($m<8&&$m>0){
if(($dm%8)===0){
$dm+=$m;
}else{
return false;
}
}else{
$dm+=$m;
}
break;
}
if($m===8){
return false;
}
}
}
return $dm;
}
var_dump(mask2dec('255.255.255.0'));
var_dump(mask2dec('255.255.255.252'));
var_dump(mask2dec('255.255.255.128'));
var_dump(mask2dec('24'));
?>

沒有留言:

張貼留言