利用ip地址和子网掩码来计算该网段最多主机数的php代码
在网上有这样一道题:网络地址172.16.22.38/27 请写出此地址的子网ID以及广播地址,此地址所处子网有多少台主机及可用主机数?请告知稍微详细的计算步骤哦。我用php来计算了一下,最大子网数没算。
代码:
<?php
$ip = "172.16.22.38"; //可根据需要换成你需要的ip地址 $mask="255.255.255.224"; //子网掩码只支持前3位为255,尾数128 192 224 240 248 252格式,为0就不用算了吧 $c=explode(".",get_net($ip,$mask)); $d=explode(".",$mask); $tag = str_replace("1", "2",decbin($d[3]));
$tagtwo=str_replace("0", "1", $tag); $tagthree=str_replace("2", "0", $tagtwo); $last=bindec($tagthree)."<br>"; $e=get_nets($ip,"$d[0].$d[1].$d[2].$last");
$arr1 =explode(".",$e); $re=$arr1[3]-$c[3]-1; $ip1=$c[3]+1; echo "你输入的ip为$ip,子网掩码为$mask<br>该主机所在ip段为$c[0].$c[1].$c[2].$c[3]--$c[0].$c[1].$c[2].$arr1[3]<br>该子网可容纳最大主机数为$re<br>广播地址为$c[0].$c[1].$c[2].$arr1[3],第一个可用主机ip为$c[0].$c[1].$c[2].$ip1<br>最大子网数没算,有点晕,这个程序本来开始就设计得不合理,太多bug,不想重来了"; function get_net($ip,$hide) { $a = explode(".",$ip); $b = explode(".",$hide); for($i=0;$i<4;$i++)
$r[$i] = (int)$a[$i] & (int)$b[$i]; return join(".",$r); } function get_nets($ip,$hide) { $a = explode(".",$ip); $b = explode(".",$hide); for($i=0;$i<4;$i++)
$r[$i] = (int)$a[$i] | (int)$b[$i]; return join(".",$r); } ?> |


foxhack
博客统计信息
热门文章
最新评论
友情链接