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 /掩码中查找主机数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ip子网掩码网络数主机数概念

网络掩码

已知IP地址,子网掩码求子网号,主机号

只知道一个ip地址如何算出他的子网掩码和网络ID以及主机ID的范围呢?

怎样根据IP地址和子网掩码计算出主机号

各类网络的默认掩码