编写一个类来存储/验证像192.168.0.0/16
这样的内容并不难,但我很好奇是否在.NET中已经存在原生类型? 我想它会像IPAddress
一样工作:
CIDR subnet = CIDR.Parse("192.168.0.0/16");
基本上,它只需要确保您正在使用IPv4或IPv6地址,然后确定指定的位数对于该类型是有效的。
编写一个类来存储/验证像192.168.0.0/16
这样的内容并不难,但我很好奇是否在.NET中已经存在原生类型? 我想它会像IPAddress
一样工作:
CIDR subnet = CIDR.Parse("192.168.0.0/16");
基本上,它只需要确保您正在使用IPv4或IPv6地址,然后确定指定的位数对于该类型是有效的。
https://github.com/lduchosal/ipnetwork
IPNetwork ipnetwork = IPNetwork.Parse("192.168.168.100/24");
Console.WriteLine("Network : {0}", ipnetwork.Network);
Console.WriteLine("Netmask : {0}", ipnetwork.Netmask);
Console.WriteLine("Broadcast : {0}", ipnetwork.Broadcast);
Console.WriteLine("FirstUsable : {0}", ipnetwork.FirstUsable);
Console.WriteLine("LastUsable : {0}", ipnetwork.LastUsable);
Console.WriteLine("Usable : {0}", ipnetwork.Usable);
Console.WriteLine("Cidr : {0}", ipnetwork.Cidr);
输出
Network : 192.168.168.0
Netmask : 255.255.255.0
Broadcast : 192.168.168.255
FirstUsable : 192.168.168.1
LastUsable : 192.168.168.254
Usable : 254
Cidr : 24
对于ASP.NET Core,现在有了IPNetwork类。以下是示例用法:
var addr = IPAddress.Parse("192.168.0.0");
var mask = 16;
var test = new IPNetwork(addr, mask).Contains(context.Connection.RemoteIpAddress);
在.NET中没有这样的本地类型,您需要自己开发一个。
IPNetwork 现在在 .NET 8 中的 System.Net 命名空间中可用。
IPNetwork n = IPNetwork.Parse("192.168.0.0/16");