This library allows you to parse range of IP address string such as "192.168.0.0/24" and "192.168.0.0/255.255.255.0" and "192.168.0.0-192.168.0.255", and can contains check. This library supports both IPv4 and IPv6.
usingNetTools;
...// rangeA.Begin is "192.168.0.0", and rangeA.End is "192.168.0.255".var rangeA =IPAddressRange.Parse("192.168.0.0/255.255.255.0");rangeA.Contains(IPAddress.Parse("192.168.0.34"));// is True.rangeA.Contains(IPAddress.Parse("192.168.10.1"));// is False.rangeA.ToCidrString();// is 192.168.0.0/24// rangeB.Begin is "192.168.0.10", and rangeB.End is "192.168.10.20".varrangeB1=IPAddressRange.Parse("192.168.0.10 - 192.168.10.20");rangeB1.Contains(IPAddress.Parse("192.168.3.45"));// is True.rangeB1.Contains(IPAddress.Parse("192.168.0.9"));// is False.// Support shortcut range description. // ("192.168.10.10-20" means range of begin:192.168.10.10 to end:192.168.10.20.)varrangeB2=IPAddressRange.Parse("192.168.10.10-20");// Support CIDR expression and IPv6.varrangeC=IPAddressRange.Parse("fe80::/10");rangeC.Contains(IPAddress.Parse("fe80::d503:4ee:3882:c586%3"));// is True.rangeC.Contains(IPAddress.Parse("::1"));// is False.// "Contains()" method also support IPAddressRange argument.varrangeD1=IPAddressRange.Parse("192.168.0.0/16");varrangeD2=IPAddressRange.Parse("192.168.10.0/24");rangeD1.Contains(rangeD2);// is True.// IEnumerable<IPAddress> support, it's lazy evaluation.foreach(varipinIPAddressRange.Parse("192.168.0.1/23")){Console.WriteLine(ip);}// You can use LINQ via "AsEnumerable()" method.varlongValues=IPAddressRange.Parse("192.168.0.1/23").AsEnumerable().Select(ip =>BitConvert.ToInt32(ip.GetAddressBytes(),0)).Select(adr =>adr.ToString("X8"));Console.WriteLine(string.Join(",",longValues);// Constructors from IPAddress objects.varipBegin=IPAddress.Parse("192.168.0.1");varipEnd=IPAddress.Parse("192.168.0.128");varipSubnet=IPAddress.Parse("255.255.255.0");varrangeE=newIPAddressRange();// This means "0.0.0.0/0".varrangeF=newIPAddressRange(ipBegin,ipEnd);varrangeG=newIPAddressRange(ipBegin,maskLength:24);varrangeH=newIPAddressRange(ipBegin,IPAddressRange.SubnetMaskLength(ipSubnet));// Calculates Cidr subnetsvarrangeI=IPAddressRange.Parse("192.168.0.0-192.168.0.254");rangeI.ToCidrString();// is 192.168.0.0/24The release notes is here.