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

使用Microsoft.AspNetCore.HttpOverrides.IPNetwork的Contains方法结果不符合预期

问题原因

Microsoft.AspNetCore.HttpOverrides.IPNetwork的构造函数不会自动将传入的IP地址和前缀长度做掩码对齐,要求传入的第一个参数必须是对应子网的网络地址。
你传入的10.10.10.1不是/30子网的网络地址,/30对应的子网掩码是255.255.255.252,和10.10.10.1做按位与运算后得到的真正网络地址是10.10.10.0,所以你初始化的ipnw实例对应的子网范围本身就是错误的,才会出现所有Contains调用都返回false的问题。

解决方法

方法1:构造时直接传入对齐后的网络地址

把构造函数的第一个参数改为正确的网络地址即可:

void Main()
{
    // 第一个参数传子网的网络地址 10.10.10.0
    var ipnw = new Microsoft.AspNetCore.HttpOverrides.IPNetwork(
                                  IPAddress.Parse("10.10.10.0"), 30);

    // 以下4条返回true
    Console.WriteLine(ipnw.Contains(IPAddress.Parse("10.10.10.0")));
    Console.WriteLine(ipnw.Contains(IPAddress.Parse("10.10.10.1")));
    Console.WriteLine(ipnw.Contains(IPAddress.Parse("10.10.10.2")));
    Console.WriteLine(ipnw.Contains(IPAddress.Parse("10.10.10.3")));

    // 以下4条返回false
    Console.WriteLine(ipnw.Contains(IPAddress.Parse("10.10.10.4")));
    Console.WriteLine(ipnw.Contains(IPAddress.Parse("10.10.10.5")));
    Console.WriteLine(ipnw.Contains(IPAddress.Parse("10.10.10.6")));
    Console.WriteLine(ipnw.Contains(IPAddress.Parse("10.10.10.7")));
}

方法2:自动计算网络地址再初始化

如果你拿到的是子网内的任意IP,需要先手动做掩码对齐再构造IPNetwork实例:

public static IPAddress GetNetworkAddress(IPAddress ip, int prefixLength)
{
    byte[] bytes = ip.GetAddressBytes();
    int maskBits = prefixLength;
    for (int i = 0; i < bytes.Length; i++)
    {
        if (maskBits >= 8)
        {
            maskBits -= 8;
            continue;
        }
        if (maskBits == 0)
        {
            bytes[i] = 0;
            continue;
        }
        bytes[i] = (byte)(bytes[i] & (0xFF << (8 - maskBits)));
        maskBits = 0;
    }
    return new IPAddress(bytes);
}

// 调用示例
var ip = IPAddress.Parse("10.10.10.1");
var ipnw = new Microsoft.AspNetCore.HttpOverrides.IPNetwork(GetNetworkAddress(ip, 30), 30);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:36:03