Skip to content

Repository files navigation

IPNetwork

Travis-CI Build StatusAppVeyor Build StatusNugetNugetFOSSA StatusCoverage StatusGitHub last commitCodeFactorSonarCloud.NETLines of CodeMaintainability RatingCoverageTechnical DebtQuality Gate StatusCode SmellsReliability RatingDuplicated Lines (%)VulnerabilitiesBugsSecurity RatingSecurityCodeScan

IPNetwork command line and C# library take care of complex network, IP, IPv4, IPv6, netmask, CIDR, subnet, subnetting, supernet, and supernetting calculation for .NET developers. It works with IPv4 as well as IPv6, is written in C#, has a light and clean API, and is fully unit-tested.


IPNetwork utility classes for .Net

IPNetwork utility classes take care of complex network, IP, IPv4, IPv6, netmask, CIDR, subnet, subnetting, supernet, and supernetting calculation for .NET developers. It works with IPv4 as well as IPv6, is written in C#, has a light and clean API, and is fully unit-tested with 100% code coverage.


Installation

PM> nuget install IPNetwork2


Example 1 (IPv6)

IPNetworkipnetwork=IPNetwork.Parse("2001:0db8::/64");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);

Output

Network : 2001:db8::
Netmask : ffff:ffff:ffff:ffff::
Broadcast :
FirstUsable : 2001:db8::
LastUsable : 2001:db8::ffff:ffff:ffff:ffff
Usable : 18446744073709551616
Cidr : 64

Example 2 (IPv6)

IPNetworkipnetwork=IPNetwork.Parse("2001:0db8::/64");IPAddressipaddress=IPAddress.Parse("2001:0db8::1");IPAddressipaddress2=IPAddress.Parse("2001:0db9::1");IPNetworkipnetwork2=IPNetwork.Parse("2001:0db8::1/128");IPNetworkipnetwork3=IPNetwork.Parse("2001:0db9::1/64");boolcontains1=ipnetwork.Contains(ipaddress);boolcontains2=ipnetwork.Contains(ipaddress2);boolcontains3=ipnetwork.Contains(ipnetwork2);boolcontains4=ipnetwork.Contains(ipnetwork3);booloverlap1=ipnetwork.Overlap(ipnetwork2);booloverlap2=ipnetwork.Overlap(ipnetwork3);Console.WriteLine("{0} contains {1} : {2}",ipnetwork,ipaddress,contains1);Console.WriteLine("{0} contains {1} : {2}",ipnetwork,ipaddress2,contains2);Console.WriteLine("{0} contains {1} : {2}",ipnetwork,ipnetwork2,contains3);Console.WriteLine("{0} contains {1} : {2}",ipnetwork,ipnetwork3,contains4);Console.WriteLine("{0} overlap {1} : {2}",ipnetwork,ipnetwork2,overlap1);Console.WriteLine("{0} overlap {1} : {2}",ipnetwork,ipnetwork3,overlap2);

Output

2001:db8::/64contains2001:db8::1:True2001:db8::/64contains2001:db9::1:False2001:db8::/64contains2001:db8::1/128 : True2001:db8::/64contains2001:db9::/64 : False2001:db8::/64overlap2001:db8::1/128 : True2001:db8::/64overlap2001:db9::/64 : False

Example 3 (IPv6)

IPNetworkwholeInternet=IPNetwork.Parse("::/0");bytenewCidr=2;IPNetworkCollectionsubneted=wholeInternet.Subnet(newCidr);Console.WriteLine("{0} was subnetted into {1} subnets",wholeInternet,subneted.Count);Console.WriteLine("First: {0}",subneted[0]);Console.WriteLine("Last : {0}",subneted[subneted.Count-1]);Console.WriteLine("All :");foreach(IPNetworkipnetworkinsubneted){Console.WriteLine("{0}",ipnetwork);}

Output

::/0wassubnettedinto4subnetsFirst: ::/2Last : c000::/2All :
::/24000::/28000::/2c000::/2

Example 4 (IPv6)

IPNetworkipnetwork1=IPNetwork.Parse("2001:0db8::/32");IPNetworkipnetwork2=IPNetwork.Parse("2001:0db9::/32");IPNetwork[]ipnetwork3=IPNetwork.Supernet(new[]{ipnetwork1,ipnetwork2});Console.WriteLine("{0} + {1} = {2}",ipnetwork1,ipnetwork2,ipnetwork3[0]);

Output

2001:db8::/32+2001:db9::/32=2001:db8::/31

Example 5

IPNetworkipnetwork=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);

Output

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

Example 6

IPNetworkipnetwork=IPNetwork.Parse("192.168.0.0/24");IPAddressipaddress=IPAddress.Parse("192.168.0.100");IPAddressipaddress2=IPAddress.Parse("192.168.1.100");IPNetworkipnetwork2=IPNetwork.Parse("192.168.0.128/25");IPNetworkipnetwork3=IPNetwork.Parse("192.168.1.1/24");boolcontains1=ipnetwork.Contains(ipaddress);boolcontains2=ipnetwork.Contains(ipaddress2);boolcontains3=ipnetwork.Contains(ipnetwork2);boolcontains4=ipnetwork.Contains(ipnetwork3);booloverlap1=ipnetwork.Overlap(ipnetwork2);booloverlap2=ipnetwork.Overlap(ipnetwork3);Console.WriteLine("{0} contains {1} : {2}",ipnetwork,ipaddress,contains1);Console.WriteLine("{0} contains {1} : {2}",ipnetwork,ipaddress2,contains2);Console.WriteLine("{0} contains {1} : {2}",ipnetwork,ipnetwork2,contains3);Console.WriteLine("{0} contains {1} : {2}",ipnetwork,ipnetwork3,contains4);Console.WriteLine("{0} overlap {1} : {2}",ipnetwork,ipnetwork2,overlap1);Console.WriteLine("{0} overlap {1} : {2}",ipnetwork,ipnetwork3,overlap2); A

Output

192.168.0.0/24contains192.168.0.100 : True192.168.0.0/24contains192.168.1.100 : False192.168.0.0/24contains192.168.0.128/25 : True192.168.0.0/24contains192.168.1.0/24 : False192.168.0.0/24overlap192.168.0.128/25 : True192.168.0.0/24overlap192.168.1.0/24 : False

Example 7

IPNetworkiana_a_block=IPNetwork.IANA_ABLK_RESERVED1;IPNetworkiana_b_block=IPNetwork.IANA_BBLK_RESERVED1;IPNetworkiana_c_block=IPNetwork.IANA_CBLK_RESERVED1;Console.WriteLine("IANA_ABLK_RESERVED1 is {0}",iana_a_block);Console.WriteLine("IANA_BBLK_RESERVED1 is {0}",iana_b_block);Console.WriteLine("IANA_CBLK_RESERVED1 is {0}",iana_c_block);

Output

IANA_ABLK_RESERVED1is10.0.0.0/8IANA_BBLK_RESERVED1is172.16.0.0/12IANA_CBLK_RESERVED1is192.168.0.0/16

Example 8

IPNetworkwholeInternet=IPNetwork.Parse("0.0.0.0/0");bytenewCidr=2;IPNetworkCollectionsubneted=wholeInternet.Subnet(newCidr);Console.WriteLine("{0} was subnetted into {1} subnets",wholeInternet,subneted.Count);Console.WriteLine("First: {0}",subneted[0]);Console.WriteLine("Last : {0}",subneted[subneted.Count-1]);Console.WriteLine("All :");foreach(IPNetworkipnetworkinsubneted){Console.WriteLine("{0}",ipnetwork);}

Output

0.0.0.0/0wassubnettedinto4subnets
First: 0.0.0.0/2
Last : 192.0.0.0/2
All :
0.0.0.0/264.0.0.0/2128.0.0.0/2192.0.0.0/2

Example 9

IPNetworkipnetwork1=IPNetwork.Parse("192.168.0.0/24");IPNetworkipnetwork2=IPNetwork.Parse("192.168.1.0/24");IPNetwork[]ipnetwork3=IPNetwork.Supernet(new[]{ipnetwork1,ipnetwork2});Console.WriteLine("{0} + {1} = {2}",ipnetwork1,ipnetwork2,ipnetwork3[0]);

Output

192.168.0.0/24+192.168.1.0/24=192.168.0.0/23

Example 10 - ClassLess network parse

If you don't specify the network cidr, IPNetwork will try to guess the CIDR for you. There are two strategies to guess ClassFull (default) and ClassLess.

ClassFull (default strategy)

is based on the default Class A, B or C networks. IPV4 :

  • Class A: 0 - 127 with a mask of 255.0.0.0 (/8)
  • Class B: 128 - 191 with a mask of 255.255.0.0 (/16)
  • Class C: 192 - 223 with a mask of 255.255.255.0 (/24)

IPV6 : /64

ClassLess

IPV4 : /32 IPV6 : /128

IPv4

IPNetworkdefaultParse=IPNetwork.Parse("192.168.0.0");// default to ClassFullIPNetworkclassFullParse=IPNetwork.Parse("192.168.0.0",CidrGuess.ClassFull);IPNetworkclassLessParse=IPNetwork.Parse("192.168.0.0",CidrGuess.ClassLess);Console.WriteLine("IPV4 Default Parse : {0}",defaultStrategy);Console.WriteLine("IPV4 ClassFull Parse : {0}",classFullParse);Console.WriteLine("IPV4 ClassLess Parse : {0}",classLessParse);

Output

IPV4Default Parse : 192.168.0.0/24IPV4ClassFull Parse : 192.168.0.0/24IPV4ClassLess Parse : 192.168.0.0/32

IPv6

IPNetworkdefaultParse=IPNetwork.Parse("::1");// default to ClassFullIPNetworkclassFullParse=IPNetwork.Parse("::1",CidrGuess.ClassFull);IPNetworkclassLessParse=IPNetwork.Parse("::1",CidrGuess.ClassLess);Console.WriteLine("IPV6 Default Parse : {0}",defaultParse);Console.WriteLine("IPV6 ClassFull Parse : {0}",classFullParse);Console.WriteLine("IPV6 ClassLess Parse : {0}",classLessParse);

Output

IPV6Default Parse : ::/64IPV6ClassFullParse : ::/64IPV6ClassLessParse : ::1/128

IPNetwork utility command line

IPNetwork utility command line take care of complex network, ip, netmask, subnet, cidr calculation for command line. It works with IPv4, it is written in C# and has a light and clean API and is fully unit tested.

Below some examples :


Provideatleastoneipnetwork
Usage: ipnetwork[-inmcbflu][-dcidr|-D][-h|-scidr|-S|-w|-W|-x|-Cnetwork|-onetwork]networks ...
Version: 2.0.1.0Printoptions-i : network-n : networkaddress-m : netmask-c : cidr-b : broadcast-f : firstusableipaddress-l : lastusableipaddress-u : numberofusableipaddresses-t : totalnumberofipaddressesParseoptions-d cidr : usecidrifnotprovided(default/32)-D : IPv4only-usedefaultcidr(ClassA/8,ClassB/16,ClassC/24)Actions-h : helpmessage-s cidr : splitnetworkintocidrsubnets-w : supernetnetworksintosmallestpossiblesubnets-W : supernetnetworksintoonesinglesubnet-x : listallipadressesinnetworks-C network : networkcontainnetworks-o network : networkoverlapnetworks-S network : substractnetworkfromsubnet
networks : oneormorenetworkaddresses(1.2.3.410.0.0.0/810.0.0.0/255.0.0.02001:db8::/322001:db8:1:2:3:4:5:6/128)

Example 10

Display ipnetwork informations :

c:\> ipnetwork10.0.0.0/8
IPNetwork : 10.0.0.0/8
Network : 10.0.0.0
Netmask : 255.0.0.0
Cidr : 8
Broadcast : 10.255.255.255
FirstUsable : 10.0.0.1
LastUsable : 10.255.255.254
Usable : 16777214

Example 11

Split network into cidr

c:\> ipnetwork-s910.0.0.0/8
IPNetwork : 10.0.0.0/9
Network : 10.0.0.0
Netmask : 255.128.0.0
Cidr : 9
Broadcast : 10.127.255.255
FirstUsable : 10.0.0.1
LastUsable : 10.127.255.254
Usable : 8388606--IPNetwork : 10.128.0.0/9
Network : 10.128.0.0
Netmask : 255.128.0.0
Cidr : 9
Broadcast : 10.255.255.255
FirstUsable : 10.128.0.1
LastUsable : 10.255.255.254
Usable : 8388606

Example 12

supernet networks into smallest possible subnets

C:\>ipnetwork-w192.168.0.0/24192.168.1.0/24
IPNetwork : 192.168.0.0/23
Network : 192.168.0.0
Netmask : 255.255.254.0
Cidr : 23
Broadcast : 192.168.1.255
FirstUsable : 192.168.0.1
LastUsable : 192.168.1.254
Usable : 510

Example 13

supernet networks into smallest possible subnets

c:\> ipnetwork-w192.168.0.0/24192.168.2.0/24
IPNetwork : 192.168.0.0/24
Network : 192.168.0.0
Netmask : 255.255.255.0
Cidr : 24
Broadcast : 192.168.0.255
FirstUsable : 192.168.0.1
LastUsable : 192.168.0.254
Usable : 254--IPNetwork : 192.168.2.0/24
Network : 192.168.2.0
Netmask : 255.255.255.0
Cidr : 24
Broadcast : 192.168.2.255
FirstUsable : 192.168.2.1
LastUsable : 192.168.2.254
Usable : 254

Example 14

supernet networks into smallest possible subnets

C:\>ipnetwork-W192.168.0.0/24192.168.129.0/24
IPNetwork : 192.168.0.0/16
Network : 192.168.0.0
Netmask : 255.255.0.0
Cidr : 16
Broadcast : 192.168.255.255
FirstUsable : 192.168.0.1
LastUsable : 192.168.255.254
Usable : 65534

Example 15

Split network into cidr, display full network only

C:\>ipnetwork-i-s1210.0.0.0/8|grep-v \-\-
IPNetwork : 10.0.0.0/12
IPNetwork : 10.16.0.0/12
IPNetwork : 10.32.0.0/12
IPNetwork : 10.48.0.0/12
IPNetwork : 10.64.0.0/12
IPNetwork : 10.80.0.0/12
IPNetwork : 10.96.0.0/12
IPNetwork : 10.112.0.0/12
IPNetwork : 10.128.0.0/12
IPNetwork : 10.144.0.0/12
IPNetwork : 10.160.0.0/12
IPNetwork : 10.176.0.0/12
IPNetwork : 10.192.0.0/12
IPNetwork : 10.208.0.0/12
IPNetwork : 10.224.0.0/12
IPNetwork : 10.240.0.0/12

Example 16

Test if an ip is contained in a network

C:\>ipnetwork-C10.0.0.110.0.0.0/810.0.1.0/2410.0.0.1/32contains10.0.0.0/8 : False10.0.0.1/32contains10.0.1.0/24 : False

Example 17

Test if a network overlap another network

C:\>ipnetwork-o10.0.0.1/2410.0.0.0/810.0.1.0/2410.0.0.0/24overlaps10.0.0.0/8 : True10.0.0.0/24overlaps10.0.1.0/24 : False

Example 18

remove one ip from a class and regroup them into the smallest possible network

C:\> ipnetwork-i-s32192.168.0.0/24 \
|grep-v \-\- \
|awk"{print $3;}" \
|grep-v192.168.0.213/32 \
|xargsipnetwork-i-w \
|grep-v \-\-
IPNetwork : 192.168.0.224/27
IPNetwork : 192.168.0.216/29
IPNetwork : 192.168.0.214/31
IPNetwork : 192.168.0.212/32
IPNetwork : 192.168.0.208/30
IPNetwork : 192.168.0.192/28
IPNetwork : 192.168.0.128/26
IPNetwork : 192.168.0.0/25

Example 18 (IPv6)

IPv6 networks

C:\> ipnetwork.exe2001:0db8::/128IPNetwork : 2001:db8::/128Network : 2001:db8::
Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Cidr : 128
Broadcast : 2001:db8::
FirstUsable : 2001:db8::
LastUsable : 2001:db8::
Usable : 0
Total : 1

Have fun !

License

FOSSA Status

About

IPNetwork command line and C# library take care of complex network, IP, IPv4, IPv6, netmask, CIDR, subnet, subnetting, supernet, and supernetting calculation for .NET developers. It works with IPv4 as well as IPv6, is written in C#, has a light and clean API, and is fully unit-tested

Resources

Code of conduct

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages