如何使用Python3将CIDR格式地址转换为IP地址范围?
用Python3将CIDR地址转换为IP范围
嘿,这个需求我经常碰到,用Python3自带的ipaddress模块就能轻松搞定,不用额外装第三方库,省心又靠谱。下面给你一步步拆解实现方法:
核心思路
每个CIDR格式的地址(比如94.192.0.0/14)其实定义了一个连续的IP网段,我们只需要找到这个网段的起始IP(网络地址)和结束IP(广播地址),然后用-把它们连起来就完成转换了。Python的ipaddress模块已经帮我们封装好了这些计算逻辑,直接调用就行。
完整代码实现
import ipaddress # 输入的CIDR地址字符串,按空格分割成列表 input_cidrs = "94.192.0.0/14 94.0.0.0/12 93.96.0.0/16".split() result_ranges = [] for cidr in input_cidrs: try: # 解析CIDR地址,strict=False允许非严格网络地址的CIDR(可选,按需开启) network = ipaddress.ip_network(cidr, strict=False) # 获取起始和结束IP并转为字符串 start_ip = str(network.network_address) end_ip = str(network.broadcast_address) # 拼接成"起始IP-结束IP"格式 result_ranges.append(f"{start_ip}-{end_ip}") except ValueError as e: # 处理无效的CIDR地址 print(f"⚠️ 无效的CIDR地址 {cidr}: {e}") # 输出最终结果,用空格分隔 print(' '.join(result_ranges))
代码关键点解释
ipaddress.ip_network(cidr, strict=False):解析CIDR地址,strict=False参数是为了兼容那些主机位不为0的非标准CIDR(比如有人误写94.192.0.1/14),如果你的输入都是标准的网段地址,也可以去掉这个参数。network.network_address:返回网段的第一个IP(起始地址)。network.broadcast_address:返回网段的最后一个IP(结束地址)。- 异常处理:加入
try-except可以避免因为输入无效CIDR导致程序崩溃,同时给出明确的错误提示。
运行结果
执行上面的代码,你会得到完全符合需求的输出:
94.192.0.0-94.195.255.255 94.0.0.0-94.15.255.255 93.96.0.0-93.96.255.255
内容的提问来源于stack exchange,提问作者tellst1




