Python如何将CIDR格式网络地址转换为子网掩码格式?
CIDR转子网掩码Python实现方案
方案1:使用标准库ipaddress实现(推荐)
Python 3.3及以上版本自带ipaddress模块,无需额外安装第三方依赖,直接调用即可完成转换:
import ipaddress # 你的原始CIDR列表 networks = ['10.202.224.0/24', '10.4.40.0/23', '10.3.41.0/24', '10.4.42.0/21'] result = [] for cidr in networks: # strict=False表示忽略CIDR中主机位非0的异常,可根据实际需求调整 net_obj = ipaddress.IPv4Network(cidr, strict=False) result.append(f"{net_obj.network_address}/{net_obj.netmask}") print(result)
运行后输出和你要求的格式完全一致:
['10.202.224.0/255.255.255.0', '10.4.40.0/255.255.254.0', '10.3.41.0/255.255.255.0', '10.4.42.0/255.255.248.0']
方案2:手动计算实现(无依赖)
如果你不想依赖内置模块,可以直接通过位运算手动计算子网掩码:
def cidr_convert(cidr_str): ip_part, prefix = cidr_str.split('/') prefix = int(prefix) # 生成32位掩码整数 mask_int = (0xFFFFFFFF << (32 - prefix)) & 0xFFFFFFFF # 转换为点分十进制格式 netmask = f"{(mask_int >> 24) & 0xFF}.{(mask_int >> 16) & 0xFF}.{(mask_int >> 8) & 0xFF}.{mask_int & 0xFF}" return f"{ip_part}/{netmask}" networks = ['10.202.224.0/24', '10.4.40.0/23', '10.3.41.0/24', '10.4.42.0/21'] result = [cidr_convert(item) for item in networks] print(result)
输出结果和方案1完全相同。
内容的提问来源于stack exchange,提问作者Ghost rider
相关产品推荐
相关产品推荐

