【问题标题】:Don't understand IPNetwork.Contains result不了解 IPNetwork.Contains 结果
【发布时间】:2021-11-10 22:38:08
【问题描述】:

我正在使用 Microsoft.AspNetCore.HttpOverrides.IPNetwork 类来检查一个 ip 地址是否在子网中,但结果不是我所期望的

void Main()
{
    var ipnw = new Microsoft.AspNetCore.HttpOverrides.IPNetwork(
                                  IPAddress.Parse("10.10.10.1"), 30);

    // expect these to be 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")));

    // expect these to be 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")));

}

我全是假的,我不明白为什么。我在https://tehnoblog.org/ip-tools/ip-address-in-cidr-range/ 找到了一个免费的在线检查网站(可怕的界面),它显示了我的期望......

我做错了什么?

【问题讨论】:

  • 先生有进展吗?
  • @TinyWang:不,同样的结果,我不知道我做错了什么,或者只是不明白应该发生什么。
  • 我看到你编辑了一个high-vote answer,关于如果在子网中如何判断IP地址,它对你不起作用?

标签: asp.net-core ip-address cidr


【解决方案1】:

根据https://github.com/dotnet/aspnetcore/issues/6674,在 MS 的包含 IPNetwork 类的实现中存在一个错误。该错误已修复,但尚未发布。当我阅读它时,它期望 CIDR 前缀的地址是来自 CIDR 前缀/长度的第一个地址。

这意味着它不喜欢“10.10.10.1/30”,而是想要“10.10.10.0/30”,这确实给出了预期的结果。

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 2020-05-07
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2020-06-25
    • 2016-12-13
    相关资源
    最近更新 更多