php获取掩码,php版 子网掩码计算器

程序源于 ipcalc 感谢外国友人 分享php 版本 本人做 小的改动 以支持 最新版本的php

1.[文件] SubnetCalc.php ~ 8KB     下载(61)

/p>

"http://www.w3.org/TR/html4/loose.dtd">

PHP Subnet Calculator

PHP Subnet Calculator

IP & Mask or CIDR:       

//Start table

print "

$end='

Valid HTML 4.01!

';

if (empty($_POST['my_net_info'])){

tr('Use IP & CIDR Netmask: ', '10.0.0.1/22');

tr('Or IP & Netmask:','10.0.0.1 255.255.252.0');

tr('Or IP & Wildcard Mask:','10.0.0.1 0.0.3.255');

print $end ;

exit ;

}

$my_net_info=rtrim($_POST['my_net_info']);

//if (! ereg('^([0-9]{1,3}\.){3}[0-9]{1,3}(( ([0-9]{1,3}\.){3}[0-9]{1,3})|(/[0-9]{1,2}))$',$my_net_info)){

if (! preg_match("/^([0-9]{1,3}\.){3}[0-9]{1,3}(( ([0-9]{1,3}\.){3}[0-9]{1,3})|(\/[0-9]{1,2}))$/",$my_net_info)){

tr("Invalid Input.");

tr('Use IP & CIDR Netmask: ', '10.0.0.1/22');

tr('Or IP & Netmask:','10.0.0.1 255.255.252.0');

tr('Or IP & Wildcard Mask:','10.0.0.1 0.0.3.255');

print $end ;

exit ;

}

//if (ereg("/",$my_net_info)){ //if cidr type mask

if (preg_match("/\//",$my_net_info)){ //if cidr type mask

$dq_host = strtok("$my_net_info", "/");

$cdr_nmask = strtok("/");

if (!($cdr_nmask >= 0 && $cdr_nmask <= 32)){

tr("Invalid CIDR value. Try an integer 0 - 32.");

print "$end";

exit ;

}

$bin_nmask=cdrtobin($cdr_nmask);

$bin_wmask=binnmtowm($bin_nmask);

} else { //Dotted quad mask?

$dqs=explode(" ", $my_net_info);

$dq_host=$dqs[0];

$bin_nmask=dqtobin($dqs[1]);

$bin_wmask=binnmtowm($bin_nmask);

//if (ereg("0",rtrim($bin_nmask, "0"))) { //Wildcard mask then? hmm?

if (preg_match("/0/",rtrim($bin_nmask, "0"))) { //Wildcard mask then? hmm?

$bin_wmask=dqtobin($dqs[1]);

$bin_nmask=binwmtonm($bin_wmask);

if (ereg("0",rtrim($bin_nmask, "0"))){ //If it's not wcard, whussup?

tr("Invalid Netmask.");

print "$end";

exit ;

}

}

$cdr_nmask=bintocdr($bin_nmask);

}

//Check for valid $dq_host

//if(! ereg('^0.',$dq_host)){

if(! preg_match("/^0\./",$dq_host)){

foreach( explode(".",$dq_host) as $octet ){

if($octet > 255){

tr("Invalid IP Address");

print $end ;

exit;

}

}

}

$bin_host=dqtobin($dq_host);

$bin_bcast=(str_pad(substr($bin_host,0,$cdr_nmask),32,1));

$bin_net=(str_pad(substr($bin_host,0,$cdr_nmask),32,0));

$bin_first=(str_pad(substr($bin_net,0,31),32,1));

$bin_last=(str_pad(substr($bin_bcast,0,31),32,0));

$host_total=(bindec(str_pad("",(32-$cdr_nmask),1)) - 1);

if ($host_total <= 0){ //Takes care of 31 and 32 bit masks.

$bin_first="N/A" ; $bin_last="N/A" ; $host_total="N/A";

if ($bin_net === $bin_bcast) $bin_bcast="N/A";

}

//Determine Class

//if (ereg('^0',$bin_net)){

if (preg_match("/^0/",$bin_net)){

$class="A";

$dotbin_net= "0" . substr(dotbin($bin_net,$cdr_nmask),1) ;

//}elseif (ereg('^10',$bin_net)){

}elseif (preg_match("/^10/",$bin_net)){

$class="B";

$dotbin_net= "10" . substr(dotbin($bin_net,$cdr_nmask),2) ;

//}elseif (ereg('^110',$bin_net)){

}elseif (preg_match("/^110/",$bin_net)){

$class="C";

$dotbin_net= "110" . substr(dotbin($bin_net,$cdr_nmask),3) ;

//}elseif (ereg('^1110',$bin_net)){

}elseif (preg_match("/^1110/",$bin_net)){

$class="D";

$dotbin_net= "1110" . substr(dotbin($bin_net,$cdr_nmask),4) ;

$special="Class D = Multicast Address Space.";

}else{

$class="E";

$dotbin_net= "1111" . substr(dotbin($bin_net,$cdr_nmask),4) ;

$special="Class E = Experimental Address Space.";

}

//if (ereg('^(00001010)|(101011000001)|(1100000010101000)',$bin_net)){

if (preg_match("/^(00001010)|(101011000001)|(1100000010101000)/",$bin_net)){

$special='( RFC-1918 Private Internet Address. )';

}

// Print Results

tr('Address:',"$dq_host",

''.dotbin($bin_host,$cdr_nmask).'');

tr('Netmask:',''.bintodq($bin_nmask)." = $cdr_nmask",

''.dotbin($bin_nmask, $cdr_nmask).'');

tr('Wildcard:', ''.bintodq($bin_wmask).'',

''.dotbin($bin_wmask, $cdr_nmask).'');

tr('Network:', ''.bintodq($bin_net).'',

"$dotbin_net","(Class $class)");

tr('Broadcast:',''.bintodq($bin_bcast).'',

''.dotbin($bin_bcast, $cdr_nmask).'');

tr('HostMin:', ''.bintodq($bin_first).'',

''.dotbin($bin_first, $cdr_nmask).'');

tr('HostMax:', ''.bintodq($bin_last).'',

''.dotbin($bin_last, $cdr_nmask).'');

@tr('Hosts/Net:', ''.$host_total.'', "$special");

print "$end";

function binnmtowm($binin){

$binin=rtrim($binin, "0");

//if (!ereg("0",$binin) ){

if (!preg_match("/0/",$binin) ){

return str_pad(str_replace("1","0",$binin), 32, "1");

} else return "1010101010101010101010101010101010101010";

}

function bintocdr ($binin){

return strlen(rtrim($binin,"0"));

}

function bintodq ($binin) {

if ($binin=="N/A") return $binin;

$binin=explode(".", chunk_split($binin,8,"."));

for ($i=0; $i<4 ; $i++) {

$dq[$i]=bindec($binin[$i]);

}

return implode(".",$dq) ;

}

function bintoint ($binin){

return bindec($binin);

}

function binwmtonm($binin){

$binin=rtrim($binin, "1");

//if (!ereg("1",$binin)){

if (!preg_match("/1/",$binin)){

return str_pad(str_replace("0","1",$binin), 32, "0");

} else return "1010101010101010101010101010101010101010";

}

function cdrtobin ($cdrin){

return str_pad(str_pad("", $cdrin, "1"), 32, "0");

}

function dotbin($binin,$cdr_nmask){

// splits 32 bit bin into dotted bin octets

if ($binin=="N/A") return $binin;

$oct=rtrim(chunk_split($binin,8,"."),".");

if ($cdr_nmask > 0){

$offset=sprintf("%u",$cdr_nmask/8) + $cdr_nmask ;

return substr($oct,0,$offset ) . "   " . substr($oct,$offset) ;

} else {

return $oct;

}

}

function dqtobin($dqin) {

$dq = explode(".",$dqin);

for ($i=0; $i<4 ; $i++) {

$bin[$i]=str_pad(decbin($dq[$i]), 8, "0", STR_PAD_LEFT);

}

return implode("",$bin);

}

function inttobin ($intin) {

return str_pad(decbin($intin), 32, "0", STR_PAD_LEFT);

}

function tr(){

echo "\t

";

for($i=0; $i".func_get_arg($i)."";

echo "

\n";

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值