You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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

火山引擎 最新活动