Subnet Calculator

IP & Mask or CIDR:                        

Linux:
Netfilter Log Format
Netfilter Log Format Issues
Linux Firewalls
What is the difference between REJECT and DENY?
\n\n" ; $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 (! preg_match("/^([0-9]{1,3}(\.[0-9]{1,3}){3})\$/",$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 (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 (preg_match("0",rtrim($bin_nmask, "0"))) { //Wildcard mask then? hmm? $bin_wmask=dqtobin($dqs[1]); $bin_nmask=binwmtonm($bin_wmask); if (preg_match("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(! 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 (preg_match('^0',$bin_net)){ $class="A"; $dotbin_net= "0" . substr(dotbin($bin_net,$cdr_nmask),1) ; }elseif (preg_match('^10',$bin_net)){ $class="B"; $dotbin_net= "10" . substr(dotbin($bin_net,$cdr_nmask),2) ; }elseif (preg_match('^110',$bin_net)){ $class="C"; $dotbin_net= "110" . substr(dotbin($bin_net,$cdr_nmask),3) ; }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 (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 (!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 (!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"; } ?>