You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向IP子网转IP范围函数传入子网列表并获取正确结果?

解决子网IP转IP范围的列表处理问题

核心问题分析

  1. 原函数仅支持单个CIDR格式字符串,无法直接处理列表
  2. 你提供的输入列表元素不是合法CIDR格式(合法CIDR应为x.x.x.x/掩码形式,比如187.11.62.92/30)
  3. 你尝试的列表推导式逻辑错误,无法直接遍历字符串列表解构出IP范围

解决方案一:处理标准CIDR列表

如果你的输入是标准CIDR格式的列表,可通过以下方式实现:

方式1:修改函数支持单个CIDR或列表

import ipaddress

def get_ip_ranges(cidr_input):
    # 处理单个CIDR字符串
    if isinstance(cidr_input, str):
        # strict=False允许非网络地址的IP作为CIDR输入
        net = ipaddress.ip_network(cidr_input, strict=False)
        return (net[0], net[-1])
    # 处理CIDR列表
    elif isinstance(cidr_input, list):
        result = []
        for cidr in cidr_input:
            net = ipaddress.ip_network(cidr, strict=False)
            result.append((net[0], net[-1]))
        return result

# 测试单个CIDR
print(get_ip_ranges("187.11.62.92/30"))
# 测试CIDR列表
cidrs = ["187.11.62.92/30", "192.168.1.0/24"]
print(get_ip_ranges(cidrs))

方式2:用列表推导式配合原函数(原函数保持处理单个CIDR)

import ipaddress

def get_ip_range(cidr):
    net = ipaddress.ip_network(cidr, strict=False)
    return net[0], net[-1]

cidrs = ["187.11.62.92/30", "192.168.1.0/24"]
# 遍历列表每个元素,调用函数生成IP范围
ip_ranges = [get_ip_range(cidr) for cidr in cidrs]
print(ip_ranges)

解决方案二:处理"起始IP,结束IP"格式的列表

如果你的输入是类似"187.11.62.93,187.11.62.95"的IP对字符串列表,可使用以下代码:

import ipaddress

def get_range_from_ip_pair(ip_pair):
    # 拆分IP对字符串为起始和结束IP
    start_ip_str, end_ip_str = ip_pair.split(',')
    start_ip = ipaddress.ip_address(start_ip_str.strip())
    end_ip = ipaddress.ip_address(end_ip_str.strip())
    return start_ip, end_ip

# 处理IP对列表
ip_pairs = ["187.11.62.93,187.11.62.95", "192.168.1.1,192.168.1.10"]
ip_ranges = [get_range_from_ip_pair(pair) for pair in ip_pairs]
print(ip_ranges)

内容的提问来源于stack exchange,提问作者Nuno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:50:41