IPAddressRange 6.1.0

IPAddressRange Class Library tests NuGet Package

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.

Examples

using NetTools;
...
// 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".
var rangeB1 = 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.)
var rangeB2 = IPAddressRange.Parse("192.168.10.10-20");

// Support CIDR expression and IPv6.
var rangeC = 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.
var rangeD1 = IPAddressRange.Parse("192.168.0.0/16");
var rangeD2 = IPAddressRange.Parse("192.168.10.0/24");
rangeD1.Contains(rangeD2); // is True.

// IEnumerable<IPAddress> support, it's lazy evaluation.
foreach (var ip in IPAddressRange.Parse("192.168.0.1/23"))
{
    Console.WriteLine(ip);
}

// You can use LINQ via "AsEnumerable()" method.
var longValues = 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.
var ipBegin = IPAddress.Parse("192.168.0.1");
var ipEnd = IPAddress.Parse("192.168.0.128");
var ipSubnet = IPAddress.Parse("255.255.255.0");

var rangeE = new IPAddressRange(); // This means "0.0.0.0/0".
var rangeF = new IPAddressRange(ipBegin, ipEnd);
var rangeG = new IPAddressRange(ipBegin, maskLength: 24);
var rangeH = new IPAddressRange(ipBegin, IPAddressRange.SubnetMaskLength(ipSubnet));

// Calculates Cidr subnets
var rangeI = IPAddressRange.Parse("192.168.0.0-192.168.0.254");
rangeI.ToCidrString();  // is 192.168.0.0/24

Release Note

The release notes is here.

License

Mozilla Public License 2.0

No packages depend on IPAddressRange.

v.6.1.0 - Add support for .NET 9.0 To see all the change logs, please visit the following URL. - https://github.com/jsakamoto/IPAddressRange/blob/master/RELEASE-NOTES.txt

.NET 5.0

  • No dependencies.

.NET 6.0

  • No dependencies.

.NET 7.0

  • No dependencies.

.NET 8.0

  • No dependencies.

.NET 9.0

  • No dependencies.

.NET Framework 4.6.2

  • No dependencies.

.NET Standard 1.4

.NET Standard 2.1

  • No dependencies.

Version Downloads Last updated
6.3.0 2 12/17/2025
6.2.0 3 12/17/2025
6.1.0 2 12/17/2025
6.0.0 2 12/17/2025
4.0.0 3 12/17/2025
3.2.2 2 12/17/2025
3.2.1 2 12/17/2025
3.2.0 3 12/17/2025
3.1.1 3 12/17/2025
3.1.0 3 12/17/2025
3.0.0.1 3 12/17/2025
3.0.0-beta 3 12/17/2025
2.2.0 3 12/17/2025
2.1.1 3 12/17/2025
2.1.1-beta 2 12/17/2025
2.1.0.1 3 12/17/2025
2.1.0-alpha 3 12/17/2025
2.0.0.4 3 12/17/2025
2.0.0.3 3 12/17/2025
2.0.0.3-beta 2 12/17/2025
2.0.0-beta 2 12/17/2025
1.6.2.7 3 12/17/2025
1.6.2.6-beta 3 12/17/2025
1.6.2.1-beta 3 12/17/2025
1.6.1 3 12/17/2025
1.6.0 2 12/17/2025
1.5.0 3 12/17/2025
1.4.0.1 3 12/17/2025
1.4.0 2 12/17/2025
1.3.0.1 3 12/17/2025
1.3.0 3 12/17/2025
1.2.1 3 12/17/2025
1.2.0 3 12/17/2025
1.1.0-beta 3 12/17/2025
1.0.6 2 12/17/2025
1.0.5 3 12/17/2025
1.0.4 3 12/17/2025
1.0.3 3 12/17/2025
1.0.2 2 12/17/2025
1.0.1 3 12/17/2025
1.0.0 3 12/17/2025