Php从IP /掩码中查找主机数

时间:2013-08-27 18:38:31

标签: php networking

如何从IP /掩码中找到主机数量(例如:190.200.22.32/255.255.255.224)?

我检查了http://php.net/manual/en/ref.network.php

中的所有功能

但我无法实现它。

请帮忙。

谢谢, 窗扇

1 个答案:

答案 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。希望这会有所帮助。