CIDR 子网是不是有本机 .NET 类型?

Posted

技术标签:

【中文标题】CIDR 子网是不是有本机 .NET 类型?【英文标题】:Is there native .NET type for CIDR subnets?CIDR 子网是否有本机 .NET 类型? 【发布时间】:2010-09-23 13:27:43 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

您可以使用 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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于CIDR 子网是不是有本机 .NET 类型?的主要内容,如果未能解决你的问题,请参考以下文章

计算公式

python设置本机IP地址子网掩码DNS,获取本机IP地址子网掩码DNSMAC

本机开发时 , 网关进行转发转发的不是本机的IP地址

利用 CIDR 划分子网后上网的主机数量是不是变化,为啥?

子网掩码网络类型IP(IPV4)地址类型VLSM CIDR相关知识

托管对象与本机对象