不了解 IP 网络。包含结果



我正在使用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/找到了一个免费的在线网站来检查(可怕的界面),它显示了我所期望的…

我做错了什么?

Per https://github.com/dotnet/aspnetcore/issues/6674,在MS的IPNetwork类的Contains实现中有一个bug。这个bug已经修复了,但是还没有发布。当我阅读它时,它期望CIDR前缀的地址是来自CIDR前缀/长度的第一个地址。

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

最新更新