计算哪个子网是IP地址

时间:2013-09-13 17:31:59

标签: php algorithm network-programming

我有一个IP地址和掩码(例如IP是10.128.20.1,掩码是255.255.248.0)。我如何计算,在哪个子网范围内添加了IP?

我尝试实现创建的解决方案,其中我按IP和掩码列出所有子网,然后我测试IP地址,是否在子网中。但我试着找到更简单的方法。

1 个答案:

答案 0 :(得分:1)

谢谢,我附上了解决方案的一部分:

   $ip_addr = "192.168.36.9"; 
   $subnet_mask = "255.255.248.0"; 

   $ip = ip2long($ip_addr); 
   $nm = ip2long($subnet_mask); 
   $nw = ($ip & $nm); 
   $bc = $nw | (~$nm); 

   echo "IP Address:         " . long2ip($ip) . "\n"; 
   echo "Subnet Mask:        " . long2ip($nm) . "\n"; 
   echo "Network Address:    " . long2ip($nw) . "\n"; 
   echo "Broadcast Address:  " . long2ip($bc) . "\n"; 
   echo "Number of Hosts:    " . ($bc - $nw - 1) . "\n"; 
   echo "Host Range:         " . long2ip($nw + 1) . " -> " . long2ip($bc - 1)  . "\n"; 

这项工作,如果我使用零子网。 对于没有零子网,此示例不起作用。