如何从IP /掩码中找到主机数量(例如:190.200.22.32/255.255.255.224)?
我检查了http://php.net/manual/en/ref.network.php
中的所有功能但我无法实现它。
请帮忙。
谢谢, 窗扇
答案 0 :(得分:2)
你不需要PHP来做到这一点。掩码为您提供子网中主机可用的位数。掩码中最大值为32。 255.255.255.0是24位(每个竞争的八位位组是8位)。所以你有2 ^(32-24)-2个主机。所以在这种情况下你有254个主机。
你在PHP中可以做的事情类似于
$octets = explode(".",$mask);
$i=0;
while($octets[$i]==255){
$i++;
}
$interestingOctet=$octets[$i];
//count the number of bits in the interesting part.
$maskbits = ($i+1)*8 + substr_count(decbin($interestingOctet),1);
echo pow(2,$maskbits)-2; //this is the number of hosts for this subnet mask
为了找到所有IP的范围,您应该找到IP地址的二进制表示,并使用子网掩码的二进制表示执行按位BOOLEAN。这将为您提供子网号码。然后反转掩码(将所有1更改为0,将所有0更改为1)并使用子网编号(您在上一步中找到)进行按位BOOLEAN OR。结果是广播地址。您可以使用的所有IP都是子网号和广播地址之间的IP地址。 (例如,子网号为192.168.1.0,广播地址为255.255.255.0,则范围为192.168.1.1,直至192.168.1.254)。
要在PHP中获得此功能,您必须基本上完成我对上面有趣的八位字节所做的操作(不计算1),然后在每个相应的八位字节中使用按位运算符http://php.net/manual/en/language.operators.bitwise.php
。希望这会有所帮助。