Php从IP /掩码中查找主机数[关闭]
Posted
技术标签:
【中文标题】Php从IP /掩码中查找主机数[关闭]【英文标题】:Php find number of hosts from IP/mask [closed] 【发布时间】:2013-08-30 15:37:14 【问题描述】:如何从 IP/掩码中找到主机数量(例如:190.200.22.32/255.255.255.224)?
我已经检查了http://php.net/manual/en/ref.network.php中的所有功能
但我做不到。
请帮忙。
谢谢, 腰带
【问题讨论】:
@putvande 请检查问题,谢谢 @AmalMurali 请检查问题,谢谢 @sash。那只是一个链接,我看不到您的任何代码。所以请提供一些您尝试过的代码。 @putvande 你不懂,如果我知道要使用哪些功能,我为什么要在这里问? 【参考方案1】:您不需要 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 地址的二进制表示,然后将其与子网掩码的二进制表示进行按位布尔运算。这将为您提供子网编号。然后反转掩码(将所有 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
。希望这会有所帮助。
【讨论】:
是否可以从 IP/掩码中获取所有 ip(主机)(例如:190.200.22.32/255.255.255.224) @sash 请看我的编辑 但是这个主机计数涉及到一些无效的真实世界 IP 与 .0 和 .255 对吧? 没有。这就是你做-2的原因。正如我所写的,范围也是从 1 到 254。如果这解决了您的问题,请不要忘记标记为已回答。以上是关于Php从IP /掩码中查找主机数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章