Provides helper (extension)methods for working with IPNetworks
$ dotnet add package IPNetworkHelper
IPNetworkHelperProvides helper (extension)methods for working with (IPv4 and/or IPv6) IPNetworks. These include parsing, splitting and extracting networks from larger networks. Available as NuGet package.
Note that since version 2.0 we use the System.Net.IPNetwork struct, which, unfortunately, is only available in .NET 8.0 and later. If you need support for earlier versions of .NET, use version 1.0 of this library.
All of the below examples use IPv4 but IPv6 works just as well.
// Parse a network
var network = IPNetwork.Parse("192.168.0.0/16");
// Tries to parse network, returns true when succeeded, false otherwise and the parsed network
if (IPNetwork.TryParse("192.168.0.0/16", out var othernetwork))
{
// ...
}
// Get first/last IP from network
var first = network.GetFirstIP(); // Network (192.168.0.0)
var last = network.GetLastIP(); // Broadcast (192.168.255.255)
// Splits a network into two halves
var (left, right) = network.Split(); // Returns 192.168.0.0/17 and 192.168.128.0/17
// Remove a subnet from a network
var desired = IPNetwork.Parse("192.168.10.16/28");
var result = network.Extract(desired);
// Result:
// 192.168.0.0/21
// 192.168.8.0/23
// 192.168.10.0/28
// 192.168.10.16/28
// 192.168.10.32/27
// 192.168.10.64/26
// 192.168.10.128/25
// 192.168.11.0/24
// 192.168.12.0/22
// 192.168.16.0/20
// 192.168.32.0/19
// 192.168.64.0/18
// 192.168.128.0/17
This library also includes an IPAddressComparer and IPNetworkComparer to be used when sorting IPAddresses or networks:
var ips = new[] { "192.168.64.0", "192.168.10.32", "192.168.0.0", "192.168.10.16", "192.168.10.0" }
.Select(IPAddress.Parse)
.OrderBy(n => n, IPAddressComparer.Default);
var networks = new[] { "192.168.64.0/18", "192.168.10.32/27", "192.168.0.0/16", "192.168.10.16/28", "192.168.10.0/28" }
.Select(IPNetwork.Parse)
.OrderBy(n => n, IPNetworkComparer.Default);
Icon made by prettycons from www.flaticon.com is licensed by CC 3.0.