如何计算IP地址对应的子网掩码?

更新于
2026-09-26 09:12:18
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计382个文字,预计阅读时间需要2分钟。

如何计算IP地址对应的子网掩码?

IP地址子网掩码计算,返回IP段起始范围、长度、掩码等信息。

如何计算IP地址对应的子网掩码?

1. [代码]pythondef ip_subnet_calculator(ip, bits): # 计算子网掩码 mask=(0xFFFFFFFF << (32 - bits)) & 0xFFFFFFFF # 转换IP地址和掩码为二进制 ip_bin=ip.split('.') mask_bin='{:032b}'.format(mask) ip_bin=[format(int(x), '08b') for x in ip_bin] mask_bin=[mask_bin[i:i+8] for i in range(0, 32, 8)]

# 计算网络地址 network_bin=[str(int(ip_bin[i], 2) & int(mask_bin[i], 2)) for i in range(4)] network_ip='.'.join(network_bin)

# 计算广播地址 broadcast_bin=[str(int(ip_bin[i], 2) | ~int(mask_bin[i], 2)) for i in range(4)] broadcast_ip='.'.join(broadcast_bin)

# 计算IP段长度 length=2 ** (32 - bits)

return [network_ip, broadcast_ip, length, mask]

IP地址子网掩码计算,返回IP段起止范围、长度、掩码等信息。

1.[代码]功能函数

/** * 掩码计算器 * @author WeakSun <52132522@qq.com> * @param string $ip IP * @param numeric $bits 掩码 * @return array 返回结果集 */ function netmask($ip, $bits = 24) { $result = [ 'start' => 0, //第一个IP 'end' => 0, //最后一个IP 'length' => 0, //包含的IP个数 'netmask' => (~pow(2, 32 - $bits)) + 1, //子网掩码 'networkSegment' => 0, //IP段 'bcast' => 0//广播地址 ]; $result['length'] = abs($result['netmask']) - 2; $result['networkSegment'] = ip2long($ip) & $result['netmask']; $result['start'] = $result['networkSegment'] + 1; $result['end'] = $result['networkSegment'] + $result['length']; $result['bcast'] = $result['end'] + 1; return $result; }

2.[代码]功能测试

list($ip, $bits) = explode('/', '192.168.1.5/25'); $tmpArr = netmask($ip, $bits); foreach ($tmpArr as $k => &$v) { $k != 'length' && $v = long2ip($v); } echo '<pre>' . var_export($tmpArr, true).'</pre>';

3.[代码]执行结果

<pre>array ( 'start' => '192.168.1.1', 'end' => '192.168.1.126', 'length' => 126, 'netmask' => '255.255.255.128', 'networkSegment' => '192.168.1.0', 'bcast' => '192.168.1.127', )</pre>

本文共计382个文字,预计阅读时间需要2分钟。

如何计算IP地址对应的子网掩码?

IP地址子网掩码计算,返回IP段起始范围、长度、掩码等信息。

如何计算IP地址对应的子网掩码?

1. [代码]pythondef ip_subnet_calculator(ip, bits): # 计算子网掩码 mask=(0xFFFFFFFF << (32 - bits)) & 0xFFFFFFFF # 转换IP地址和掩码为二进制 ip_bin=ip.split('.') mask_bin='{:032b}'.format(mask) ip_bin=[format(int(x), '08b') for x in ip_bin] mask_bin=[mask_bin[i:i+8] for i in range(0, 32, 8)]

# 计算网络地址 network_bin=[str(int(ip_bin[i], 2) & int(mask_bin[i], 2)) for i in range(4)] network_ip='.'.join(network_bin)

# 计算广播地址 broadcast_bin=[str(int(ip_bin[i], 2) | ~int(mask_bin[i], 2)) for i in range(4)] broadcast_ip='.'.join(broadcast_bin)

# 计算IP段长度 length=2 ** (32 - bits)

return [network_ip, broadcast_ip, length, mask]

IP地址子网掩码计算,返回IP段起止范围、长度、掩码等信息。

1.[代码]功能函数

/** * 掩码计算器 * @author WeakSun <52132522@qq.com> * @param string $ip IP * @param numeric $bits 掩码 * @return array 返回结果集 */ function netmask($ip, $bits = 24) { $result = [ 'start' => 0, //第一个IP 'end' => 0, //最后一个IP 'length' => 0, //包含的IP个数 'netmask' => (~pow(2, 32 - $bits)) + 1, //子网掩码 'networkSegment' => 0, //IP段 'bcast' => 0//广播地址 ]; $result['length'] = abs($result['netmask']) - 2; $result['networkSegment'] = ip2long($ip) & $result['netmask']; $result['start'] = $result['networkSegment'] + 1; $result['end'] = $result['networkSegment'] + $result['length']; $result['bcast'] = $result['end'] + 1; return $result; }

2.[代码]功能测试

list($ip, $bits) = explode('/', '192.168.1.5/25'); $tmpArr = netmask($ip, $bits); foreach ($tmpArr as $k => &$v) { $k != 'length' && $v = long2ip($v); } echo '<pre>' . var_export($tmpArr, true).'</pre>';

3.[代码]执行结果

<pre>array ( 'start' => '192.168.1.1', 'end' => '192.168.1.126', 'length' => 126, 'netmask' => '255.255.255.128', 'networkSegment' => '192.168.1.0', 'bcast' => '192.168.1.127', )</pre>