Provides helper (extension)methods for working with (IPv4 and/or IPv6) IPNetworks. These include 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.
Version 3.0 has a breaking change where Contains() now does the more intuitive thing and checks if the network is entirely contained within another network. If you want to check if two networks overlap, use the Overlaps() method.
All of the below examples use IPv4 but IPv6 works just as well.
// Parse a networkvarnetwork=IPNetwork.Parse("192.168.0.0/16");// Tries to parse network, returns true when succeeded, false otherwise and the parsed networkif(IPNetwork.TryParse("192.168.0.0/16",outvarothernetwork)){// ...}// Get last IP from networkvarfirst=network.GetFirstIP();// Network (192.168.0.0)varlast=network.GetLastIP();// Broadcast (192.168.255.255)// Splits a network into two halvesvar(left,right)=network.Split();// Returns 192.168.0.0/17 and 192.168.128.0/17// Extract a subnet from a networkvardesired=IPNetwork.Parse("192.168.10.16/28");varresult=network.Extract(desired);// Result:// 192.168.0.0/21// 192.168.8.0/23// 192.168.10.0/28// 192.168.10.16/28 <- desired// 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/17The Contains(IPNetwork) method can be used to check if a network is contained (entirely) within another network and the Overlaps(IPNetwork) method can be used to check if two networks overlap.
This library also includes an IPAddressComparer and IPNetworkComparer to be used when sorting IPAddresses or networks:
varips=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);varnetworks=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.
