CIDR是否有原生的.NET类型?

8zzbczxx  于 2023-11-20  发布在  .NET
关注(0)|答案(4)|浏览(97)

编写一个类来存储/验证像192.168.0.0/16这样的东西是很简单的,但是我很好奇.NET中是否已经存在这样的原生类型?我想它会像IPAddress一样工作:

CIDR subnet = CIDR.Parse("192.168.0.0/16");

字符串
基本上,它只需要确保您正在使用IPv4或IPv6地址,然后您指定的位数对该类型有效。

2j4z5cfb

2j4z5cfb1#

你可以使用GitHub上的代码来做到这一点:
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

0x6upsns

0x6upsns2#

对于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);

字符串

xn1cxnb4

xn1cxnb43#

在.NET中没有这样的原生类型,你需要自己开发一个。

stszievb

stszievb4#

从.NET 8开始,IPNetwork现在可以在System.Net命名空间中使用。

IPNetwork n = IPNetwork.Parse("192.168.0.0/16");

字符串

相关问题