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

如何在C#中检查IP范围是否符合IPv4/IPv6 CIDR格式?

验证IPv4/IPv6 CIDR格式的实现方案

你提供的代码仅能验证单个IP地址的合法性,无法处理带子网前缀的CIDR格式(比如192.168.2.0/24)。以下是修改后的实现,专门用于验证CIDR格式的合法性:

public static bool IsValidCidr(string cidrAddress)
{
    // 拆分CIDR地址为IP部分和前缀长度部分
    string[] parts = cidrAddress.Split('/');
    if (parts.Length != 2)
        return false;

    string ipPart = parts[0];
    if (!IPAddress.TryParse(ipPart, out IPAddress ip))
        return false;

    // 解析并验证前缀长度的合法性
    if (!int.TryParse(parts[1], out int prefixLength))
        return false;

    switch (ip.AddressFamily)
    {
        case AddressFamily.InterNetwork:
            // IPv4前缀长度范围为0-32
            return prefixLength is >= 0 and <= 32;
        case AddressFamily.InterNetworkV6:
            // IPv6前缀长度范围为0-128
            return prefixLength is >= 0 and <= 128;
        default:
            return false;
    }
}

代码说明:

  • 首先拆分输入字符串,确保格式为[IP地址]/[前缀长度]
  • 调用IPAddress.TryParse验证IP部分是否为合法的IPv4或IPv6地址
  • 将前缀部分解析为整数,并根据IP类型判断是否在合法范围内:
    • IPv4的前缀长度必须是0到32之间的整数
    • IPv6的前缀长度必须是0到128之间的整数

如果需要同时兼容单个IP地址(不带前缀)的验证,可以使用以下版本:

public static bool IsValidIpOrCidr(string address)
{
    string[] parts = address.Split('/');
    if (parts.Length > 2)
        return false;

    string ipPart = parts[0];
    if (!IPAddress.TryParse(ipPart, out IPAddress ip))
        return false;

    // 无前缀时,直接判定为合法IP
    if (parts.Length == 1)
        return true;

    if (!int.TryParse(parts[1], out int prefixLength))
        return false;

    switch (ip.AddressFamily)
    {
        case AddressFamily.InterNetwork:
            return prefixLength is >= 0 and <= 32;
        case AddressFamily.InterNetworkV6:
            return prefixLength is >= 0 and <= 128;
        default:
            return false;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:10:15