{"id":13590882,"url":"https://github.com/lduchosal/ipnetwork","last_synced_at":"2026-01-16T13:12:22.695Z","repository":{"id":36051128,"uuid":"40348946","full_name":"lduchosal/ipnetwork","owner":"lduchosal","description":"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","archived":false,"fork":false,"pushed_at":"2025-12-10T08:29:38.000Z","size":18042,"stargazers_count":516,"open_issues_count":2,"forks_count":101,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-12-10T11:10:12.747Z","etag":null,"topics":["cidr","csharp","ipv4","ipv6","netmask","subnet"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lduchosal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-08-07T08:05:57.000Z","updated_at":"2025-12-10T08:28:59.000Z","dependencies_parsed_at":"2023-01-16T12:31:25.294Z","dependency_job_id":"2ab3b7f0-f064-444b-83f2-fa0fde524135","html_url":"https://github.com/lduchosal/ipnetwork","commit_stats":{"total_commits":332,"total_committers":23,"mean_commits":"14.434782608695652","dds":0.5451807228915663,"last_synced_commit":"c2f8003e4b7f10671b094c49eaec2662a6ee320c"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/lduchosal/ipnetwork","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lduchosal%2Fipnetwork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lduchosal%2Fipnetwork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lduchosal%2Fipnetwork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lduchosal%2Fipnetwork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lduchosal","download_url":"https://codeload.github.com/lduchosal/ipnetwork/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lduchosal%2Fipnetwork/sbom","scorecard":{"id":581495,"data":{"date":"2025-08-11","repo":{"name":"github.com/lduchosal/ipnetwork","commit":"76152405a9b2b50598fc9dd4df81db487b01ed78"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"9 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'packages' permission set to 'read': .github/workflows/codeql.yml:36","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:39","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:40","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Warn: no topLevel permission defined: .github/workflows/docfx.yml:1","Warn: no topLevel permission defined: .github/workflows/dotnet.yml:1","Warn: no topLevel permission defined: .github/workflows/sonarcloud.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 2-Clause \"Simplified\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 3.2 not signed: https://api.github.com/repos/lduchosal/ipnetwork/releases/240212018","Warn: release artifact 2.2.0 not signed: https://api.github.com/repos/lduchosal/ipnetwork/releases/14962537","Warn: release artifact 3.2 does not have provenance: https://api.github.com/repos/lduchosal/ipnetwork/releases/240212018","Warn: release artifact 2.2.0 does not have provenance: https://api.github.com/repos/lduchosal/ipnetwork/releases/14962537"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Info: 'branch protection settings apply to administrators' is required to merge on branch 'master'","Warn: could not determine whether codeowners review is allowed","Warn: no status checks found to merge onto branch 'master'","Warn: PRs are not required to make changes on branch 'master'; or we don't have data to detect it.If you think it might be the latter, make sure to run Scorecard with a PAT or use Repo Rules (that are always public) instead of Branch Protection settings"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:98: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docfx.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/docfx.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docfx.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/docfx.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docfx.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/docfx.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dotnet.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/dotnet.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dotnet.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/dotnet.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sonarcloud.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/sonarcloud.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sonarcloud.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/sonarcloud.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sonarcloud.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/sonarcloud.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sonarcloud.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/lduchosal/ipnetwork/sonarcloud.yml/master?enable=pin","Warn: nugetCommand not pinned by hash: .github/workflows/dotnet.yml:24: pin your dependecies by either enabling central package management (https://learn.microsoft.com/nuget/consume-packages/Central-Package-Management) or using a lockfile (https://learn.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies)","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 nugetCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (13) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T19:16:57.766Z","repository_id":36051128,"created_at":"2025-08-20T19:16:57.771Z","updated_at":"2025-08-20T19:16:57.771Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478960,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cidr","csharp","ipv4","ipv6","netmask","subnet"],"created_at":"2024-08-01T16:00:51.427Z","updated_at":"2026-01-16T13:12:17.686Z","avatar_url":"https://github.com/lduchosal.png","language":"C#","funding_links":[],"categories":["C# #","C\\#","C#"],"sub_categories":[],"readme":"# IPNetwork \n\n[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/lduchosal/ipnetwork?branch=master\u0026svg=true)](https://ci.appveyor.com/project/lduchosal/ipnetwork/branch/master)\n[![Nuget](https://img.shields.io/badge/nuget-ipnetwork2-blue.svg)](https://www.nuget.org/packages/ipnetwork2)\n[![Nuget](https://img.shields.io/nuget/dt/IPNetwork2)](https://www.nuget.org/packages/ipnetwork2)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Flduchosal%2Fipnetwork.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Flduchosal%2Fipnetwork?ref=badge_shield)\n[![Coverage Status](https://coveralls.io/repos/github/lduchosal/ipnetwork/badge.svg?branch=master)](https://coveralls.io/github/lduchosal/ipnetwork?branch=master)\n![GitHub last commit](https://img.shields.io/github/last-commit/lduchosal/ipnetwork)\n[![CodeFactor](https://www.codefactor.io/repository/github/lduchosal/ipnetwork/badge)](https://www.codefactor.io/repository/github/lduchosal/ipnetwork)\n[![SonarCloud](https://github.com/lduchosal/ipnetwork/actions/workflows/sonarcloud.yml/badge.svg)](https://github.com/lduchosal/ipnetwork/actions/workflows/sonarcloud.yml)\n[![.NET](https://github.com/lduchosal/ipnetwork/actions/workflows/dotnet.yml/badge.svg)](https://github.com/lduchosal/ipnetwork/actions/workflows/dotnet.yml)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=ncloc)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=code_smells)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=lduchosal_ipnetwork\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=lduchosal_ipnetwork)\n\nIPNetwork 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.\n\n---\n\n## IPNetwork utility classes for .Net\n\nIPNetwork 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.\n\n---\n\n### Installation\n\nPM\u003e nuget install IPNetwork2\n\n---\n\n### Example 1 (IPv6)\n\n```C#\nIPNetwork2 ipnetwork = IPNetwork2.Parse(\"2001:0db8::/64\");\n\nConsole.WriteLine(\"Network : {0}\", ipnetwork.Network);\nConsole.WriteLine(\"Netmask : {0}\", ipnetwork.Netmask);\nConsole.WriteLine(\"Broadcast : {0}\", ipnetwork.Broadcast);\nConsole.WriteLine(\"FirstUsable : {0}\", ipnetwork.FirstUsable);\nConsole.WriteLine(\"LastUsable : {0}\", ipnetwork.LastUsable);\nConsole.WriteLine(\"Usable : {0}\", ipnetwork.Usable);\nConsole.WriteLine(\"Cidr : {0}\", ipnetwork.Cidr);\n```\n\nOutput\n\n```JS\nNetwork : 2001:db8::\nNetmask : ffff:ffff:ffff:ffff::\nBroadcast :\nFirstUsable : 2001:db8::\nLastUsable : 2001:db8::ffff:ffff:ffff:ffff\nUsable : 18446744073709551616\nCidr : 64\n```\n\n---\n\n### Example 2 (IPv6)\n\n```C#\nIPNetwork2 ipnetwork = IPNetwork2.Parse(\"2001:0db8::/64\");\n\nIPAddress ipaddress = IPAddress.Parse(\"2001:0db8::1\");\nIPAddress ipaddress2 = IPAddress.Parse(\"2001:0db9::1\");\n\nIPNetwork2 ipnetwork2 = IPNetwork2.Parse(\"2001:0db8::1/128\");\nIPNetwork2 ipnetwork3 = IPNetwork2.Parse(\"2001:0db9::1/64\");\n\nbool contains1 = ipnetwork.Contains(ipaddress);\nbool contains2 = ipnetwork.Contains(ipaddress2);\nbool contains3 = ipnetwork.Contains(ipnetwork2);\nbool contains4 = ipnetwork.Contains(ipnetwork3);\n\nbool overlap1 = ipnetwork.Overlap(ipnetwork2);\nbool overlap2 = ipnetwork.Overlap(ipnetwork3);\n\nConsole.WriteLine(\"{0} contains {1} : {2}\", ipnetwork, ipaddress, contains1);\nConsole.WriteLine(\"{0} contains {1} : {2}\", ipnetwork, ipaddress2, contains2);\nConsole.WriteLine(\"{0} contains {1} : {2}\", ipnetwork, ipnetwork2, contains3);\nConsole.WriteLine(\"{0} contains {1} : {2}\", ipnetwork, ipnetwork3, contains4);\n\n\nConsole.WriteLine(\"{0} overlap {1} : {2}\", ipnetwork, ipnetwork2, overlap1);\nConsole.WriteLine(\"{0} overlap {1} : {2}\", ipnetwork, ipnetwork3, overlap2);\n```\n\nOutput\n\n```JS\n2001:db8::/64 contains 2001:db8::1 : True\n2001:db8::/64 contains 2001:db9::1 : False\n2001:db8::/64 contains 2001:db8::1/128 : True\n2001:db8::/64 contains 2001:db9::/64 : False\n2001:db8::/64 overlap 2001:db8::1/128 : True\n2001:db8::/64 overlap 2001:db9::/64 : False\n```\n\n---\n\n### Example 3 (IPv6)\n\n```C#\nIPNetwork2 wholeInternet = IPNetwork2.Parse(\"::/0\");\nbyte newCidr = 2;\nIPNetworkCollection subneted = wholeInternet.Subnet(newCidr);\n\nConsole.WriteLine(\"{0} was subnetted into {1} subnets\", wholeInternet, subneted.Count);\nConsole.WriteLine(\"First: {0}\", subneted[0]);\nConsole.WriteLine(\"Last : {0}\", subneted[subneted.Count - 1]);\nConsole.WriteLine(\"All  :\");\n\nforeach (IPNetwork2 ipnetwork in subneted) {\n    Console.WriteLine(\"{0}\", ipnetwork);\n}\n```\n\nOutput\n\n```JS\n::/0 was subnetted into 4 subnets\nFirst: ::/2\nLast : c000::/2\nAll  :\n::/2\n4000::/2\n8000::/2\nc000::/2\n```\n\n---\n\n### Example 4 (IPv6)\n\n```C#\nIPNetwork2 ipnetwork1 = IPNetwork2.Parse(\"2001:0db8::/32\");\nIPNetwork2 ipnetwork2 = IPNetwork2.Parse(\"2001:0db9::/32\");\nIPNetwork2[] ipnetwork3 = IPNetwork2.Supernet(new[] { ipnetwork1, ipnetwork2 });\n\nConsole.WriteLine(\"{0} + {1} = {2}\", ipnetwork1, ipnetwork2, ipnetwork3[0]);\n```\n\nOutput\n\n```JS\n2001:db8::/32 + 2001:db9::/32 = 2001:db8::/31\n```\n\n---\n\n### Example 5\n\n```C#\nIPNetwork2 ipnetwork = IPNetwork2.Parse(\"192.168.168.100/24\");\n\nConsole.WriteLine(\"Network : {0}\", ipnetwork.Network);\nConsole.WriteLine(\"Netmask : {0}\", ipnetwork.Netmask);\nConsole.WriteLine(\"Broadcast : {0}\", ipnetwork.Broadcast);\nConsole.WriteLine(\"FirstUsable : {0}\", ipnetwork.FirstUsable);\nConsole.WriteLine(\"LastUsable : {0}\", ipnetwork.LastUsable);\nConsole.WriteLine(\"Usable : {0}\", ipnetwork.Usable);\nConsole.WriteLine(\"Cidr : {0}\", ipnetwork.Cidr);\n```\n\nOutput\n\n```MD\nNetwork : 192.168.168.0\nNetmask : 255.255.255.0\nBroadcast : 192.168.168.255\nFirstUsable : 192.168.168.1\nLastUsable : 192.168.168.254\nUsable : 254\nCidr : 24\n```\n\n---\n\n### Example 6\n\n```C#\nIPNetwork2 ipnetwork = IPNetwork2.Parse(\"192.168.0.0/24\");\nIPAddress ipaddress = IPAddress.Parse(\"192.168.0.100\");\nIPAddress ipaddress2 = IPAddress.Parse(\"192.168.1.100\");\n\nIPNetwork2 ipnetwork2 = IPNetwork2.Parse(\"192.168.0.128/25\");\nIPNetwork2 ipnetwork3 = IPNetwork2.Parse(\"192.168.1.1/24\");\n\nbool contains1 = ipnetwork.Contains(ipaddress);\nbool contains2 = ipnetwork.Contains(ipaddress2);\nbool contains3 = ipnetwork.Contains(ipnetwork2);\nbool contains4 = ipnetwork.Contains(ipnetwork3);\n\nbool overlap1 = ipnetwork.Overlap(ipnetwork2);\nbool overlap2 = ipnetwork.Overlap(ipnetwork3);\n\nConsole.WriteLine(\"{0} contains {1} : {2}\", ipnetwork, ipaddress, contains1);\nConsole.WriteLine(\"{0} contains {1} : {2}\", ipnetwork, ipaddress2, contains2);\nConsole.WriteLine(\"{0} contains {1} : {2}\", ipnetwork, ipnetwork2, contains3);\nConsole.WriteLine(\"{0} contains {1} : {2}\", ipnetwork, ipnetwork3, contains4);\n\nConsole.WriteLine(\"{0} overlap {1} : {2}\", ipnetwork, ipnetwork2, overlap1);\nConsole.WriteLine(\"{0} overlap {1} : {2}\", ipnetwork, ipnetwork3, overlap2); A\n```\n\nOutput\n\n```JS\n192.168.0.0/24 contains 192.168.0.100 : True\n192.168.0.0/24 contains 192.168.1.100 : False\n192.168.0.0/24 contains 192.168.0.128/25 : True\n192.168.0.0/24 contains 192.168.1.0/24 : False\n192.168.0.0/24 overlap 192.168.0.128/25 : True\n192.168.0.0/24 overlap 192.168.1.0/24 : False\n```\n\n---\n\n### Example 7\n\n```C#\nIPNetwork2 iana_a_block = IPNetwork2.IANA_ABLK_RESERVED1;\nIPNetwork2 iana_b_block = IPNetwork2.IANA_BBLK_RESERVED1;\nIPNetwork2 iana_c_block = IPNetwork2.IANA_CBLK_RESERVED1;\n\nConsole.WriteLine(\"IANA_ABLK_RESERVED1 is {0}\", iana_a_block);\nConsole.WriteLine(\"IANA_BBLK_RESERVED1 is {0}\", iana_b_block);\nConsole.WriteLine(\"IANA_CBLK_RESERVED1 is {0}\", iana_c_block);\n```\n\nOutput\n\n```JS\nIANA_ABLK_RESERVED1 is 10.0.0.0/8\nIANA_BBLK_RESERVED1 is 172.16.0.0/12\nIANA_CBLK_RESERVED1 is 192.168.0.0/16\n```\n\n---\n\n### Example 8\n\n```C#\nIPNetwork2 wholeInternet = IPNetwork2.Parse(\"0.0.0.0/0\");\nbyte newCidr = 2;\nIPNetworkCollection subneted = wholeInternet.Subnet(newCidr);\n\nConsole.WriteLine(\"{0} was subnetted into {1} subnets\", wholeInternet, subneted.Count);\nConsole.WriteLine(\"First: {0}\", subneted[0]);\nConsole.WriteLine(\"Last : {0}\", subneted[subneted.Count - 1]);\nConsole.WriteLine(\"All  :\");\n\nforeach (IPNetwork2 ipnetwork in subneted)\n{\n    Console.WriteLine(\"{0}\", ipnetwork);\n}\n```\n\nOutput\n\n```JS\n0.0.0.0/0 was subnetted into 4 subnets\nFirst: 0.0.0.0/2\nLast : 192.0.0.0/2\nAll  :\n0.0.0.0/2\n64.0.0.0/2\n128.0.0.0/2\n192.0.0.0/2\n```\n\n---\n\n### Example 9\n\n```C#\nIPNetwork2 ipnetwork1 = IPNetwork2.Parse(\"192.168.0.0/24\");\nIPNetwork2 ipnetwork2 = IPNetwork2.Parse(\"192.168.1.0/24\");\nIPNetwork2[] ipnetwork3 = IPNetwork2.Supernet(new[]{ipnetwork1, ipnetwork2});\n\nConsole.WriteLine(\"{0} + {1} = {2}\", ipnetwork1, ipnetwork2, ipnetwork3[0]);\n```\n\nOutput\n\n```JS\n192.168.0.0/24 + 192.168.1.0/24 = 192.168.0.0/23\n```\n\n---\n\n### Example 10 - ClassLess network parse\n\nIf 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.\n\n#### ClassFull (default strategy)\n\nis based on the default Class A, B or C networks.\nIPV4 :\n\n- Class A: 0 - 127 with a mask of 255.0.0.0 (/8)\n- Class B: 128 - 191 with a mask of 255.255.0.0 (/16)\n- Class C: 192 - 223 with a mask of 255.255.255.0 (/24)\n\nIPV6 : /64\n\n#### ClassLess\n\nIPV4 : /32\nIPV6 : /128\n\n#### IPv4\n\n```C#\nIPNetwork2 defaultParse= IPNetwork2.Parse(\"192.168.0.0\"); // default to ClassFull\nIPNetwork2 classFullParse = IPNetwork2.Parse(\"192.168.0.0\", CidrGuess.ClassFull);\nIPNetwork2 classLessParse = IPNetwork2.Parse(\"192.168.0.0\", CidrGuess.ClassLess);\n\nConsole.WriteLine(\"IPV4 Default Parse : {0}\", defaultStrategy);\nConsole.WriteLine(\"IPV4 ClassFull Parse : {0}\", classFullParse);\nConsole.WriteLine(\"IPV4 ClassLess Parse : {0}\", classLessParse);\n```\n\nOutput\n\n```JS\nIPV4 Default Parse : 192.168.0.0/24\nIPV4 ClassFull Parse : 192.168.0.0/24\nIPV4 ClassLess Parse : 192.168.0.0/32\n```\n\n#### IPv6\n\n```C#\nIPNetwork2 defaultParse = IPNetwork2.Parse(\"::1\"); // default to ClassFull\nIPNetwork2 classFullParse = IPNetwork2.Parse(\"::1\", CidrGuess.ClassFull);\nIPNetwork2 classLessParse = IPNetwork2.Parse(\"::1\", CidrGuess.ClassLess);\n\nConsole.WriteLine(\"IPV6 Default Parse : {0}\", defaultParse);\nConsole.WriteLine(\"IPV6 ClassFull Parse : {0}\", classFullParse);\nConsole.WriteLine(\"IPV6 ClassLess Parse : {0}\", classLessParse);\n```\n\nOutput\n\n```JS\nIPV6 Default Parse : ::/64\nIPV6 ClassFull Parse : ::/64\nIPV6 ClassLess Parse : ::1/128\n```\n\n---\n\n## IPNetwork utility command line\n\nIPNetwork utility command line take care of complex network, ip, netmask,\nsubnet, cidr calculation for command line. It works with IPv4,\nit is written in C# and has a light and clean API and is fully unit tested.\n\nBelow some examples :\n\n---\n\n```JS\nProvide at least one ipnetwork\nUsage: ipnetwork [-inmcbflu] [-d cidr|-D] [-h|-s cidr|-S|-w|-W|-x|-C network|-o network] networks ...\nVersion: 3.1.0\n\nPrint options\n        -i : network\n        -n : network address\n        -m : netmask\n        -c : cidr\n        -b : broadcast\n        -f : first usable ip address\n        -l : last usable ip address\n        -u : number of usable ip addresses\n        -t : total number of ip addresses\n\nParse options\n        -d cidr : use cidr if not provided (default /32)\n        -D      : IPv4 only - use default cidr (ClassA/8, ClassB/16, ClassC/24)\n\nActions\n        -h         : help message\n        -s cidr    : split network into cidr subnets\n        -w         : supernet networks into smallest possible subnets\n        -W         : supernet networks into one single subnet\n        -x         : list all ipadresses in networks\n        -C network : network contain networks\n        -o network : network overlap networks\n        -S network : substract network from subnet\n\nnetworks  : one or more network addresses\n            (1.2.3.4 10.0.0.0/8 10.0.0.0/255.0.0.0 2001:db8::/32 2001:db8:1:2:3:4:5:6/128 )\n```\n\n---\n\n### Example 10\n\nDisplay ipnetwork informations :\n\n```JS\nc:\\\u003e ipnetwork 10.0.0.0/8\n\nIPNetwork   : 10.0.0.0/8\nNetwork     : 10.0.0.0\nNetmask     : 255.0.0.0\nCidr        : 8\nBroadcast   : 10.255.255.255\nFirstUsable : 10.0.0.1\nLastUsable  : 10.255.255.254\nUsable      : 16777214\n```\n\n---\n\n### Example 11\n\nSplit network into cidr\n\n```JS\nc:\\\u003e ipnetwork -s 9 10.0.0.0/8\n\nIPNetwork   : 10.0.0.0/9\nNetwork     : 10.0.0.0\nNetmask     : 255.128.0.0\nCidr        : 9\nBroadcast   : 10.127.255.255\nFirstUsable : 10.0.0.1\nLastUsable  : 10.127.255.254\nUsable      : 8388606\n--\nIPNetwork   : 10.128.0.0/9\nNetwork     : 10.128.0.0\nNetmask     : 255.128.0.0\nCidr        : 9\nBroadcast   : 10.255.255.255\nFirstUsable : 10.128.0.1\nLastUsable  : 10.255.255.254\nUsable      : 8388606\n```\n\n---\n\n### Example 12\n\nsupernet networks into smallest possible subnets\n\n```JS\nC:\\\u003eipnetwork -w 192.168.0.0/24 192.168.1.0/24\n\nIPNetwork   : 192.168.0.0/23\nNetwork     : 192.168.0.0\nNetmask     : 255.255.254.0\nCidr        : 23\nBroadcast   : 192.168.1.255\nFirstUsable : 192.168.0.1\nLastUsable  : 192.168.1.254\nUsable      : 510\n```\n\n---\n\n### Example 13\n\nsupernet networks into smallest possible subnets\n\n```JS\nc:\\\u003e ipnetwork -w 192.168.0.0/24 192.168.2.0/24\n\nIPNetwork   : 192.168.0.0/24\nNetwork     : 192.168.0.0\nNetmask     : 255.255.255.0\nCidr        : 24\nBroadcast   : 192.168.0.255\nFirstUsable : 192.168.0.1\nLastUsable  : 192.168.0.254\nUsable      : 254\n--\nIPNetwork   : 192.168.2.0/24\nNetwork     : 192.168.2.0\nNetmask     : 255.255.255.0\nCidr        : 24\nBroadcast   : 192.168.2.255\nFirstUsable : 192.168.2.1\nLastUsable  : 192.168.2.254\nUsable      : 254\n```\n\n---\n\n### Example 14\n\nsupernet networks into smallest possible subnets\n\n```JS\nC:\\\u003eipnetwork -W 192.168.0.0/24 192.168.129.0/24\nIPNetwork   : 192.168.0.0/16\nNetwork     : 192.168.0.0\nNetmask     : 255.255.0.0\nCidr        : 16\nBroadcast   : 192.168.255.255\nFirstUsable : 192.168.0.1\nLastUsable  : 192.168.255.254\nUsable      : 65534\n```\n\n---\n\n### Example 15\n\nSplit network into cidr, display full network only\n\n```JS\nC:\\\u003eipnetwork -i -s 12 10.0.0.0/8 | grep -v \\-\\-\n\nIPNetwork   : 10.0.0.0/12\nIPNetwork   : 10.16.0.0/12\nIPNetwork   : 10.32.0.0/12\nIPNetwork   : 10.48.0.0/12\nIPNetwork   : 10.64.0.0/12\nIPNetwork   : 10.80.0.0/12\nIPNetwork   : 10.96.0.0/12\nIPNetwork   : 10.112.0.0/12\nIPNetwork   : 10.128.0.0/12\nIPNetwork   : 10.144.0.0/12\nIPNetwork   : 10.160.0.0/12\nIPNetwork   : 10.176.0.0/12\nIPNetwork   : 10.192.0.0/12\nIPNetwork   : 10.208.0.0/12\nIPNetwork   : 10.224.0.0/12\nIPNetwork   : 10.240.0.0/12\n```\n\n---\n\n### Example 16\n\nTest if an ip is contained in a network\n\n```JS\nC:\\\u003eipnetwork -C 10.0.0.1 10.0.0.0/8 10.0.1.0/24\n\n10.0.0.1/32 contains 10.0.0.0/8 : False\n10.0.0.1/32 contains 10.0.1.0/24 : False\n```\n\n---\n\n### Example 17\n\nTest if a network overlap another network\n\n```JS\nC:\\\u003eipnetwork -o 10.0.0.1/24 10.0.0.0/8 10.0.1.0/24\n\n10.0.0.0/24 overlaps 10.0.0.0/8 : True\n10.0.0.0/24 overlaps 10.0.1.0/24 : False\n```\n\n---\n\n### Example 18\n\nremove one ip from a class and regroup them into the smallest possible network\n\n```JS\nC:\\\u003e ipnetwork -i -s 32 192.168.0.0/24 \\\n          | grep -v \\-\\- \\\n          | awk \"{print $3;}\" \\\n          | grep -v 192.168.0.213/32 \\\n          | xargs ipnetwork -i -w \\\n          | grep -v \\-\\-\n\nIPNetwork   : 192.168.0.224/27\nIPNetwork   : 192.168.0.216/29\nIPNetwork   : 192.168.0.214/31\nIPNetwork   : 192.168.0.212/32\nIPNetwork   : 192.168.0.208/30\nIPNetwork   : 192.168.0.192/28\nIPNetwork   : 192.168.0.128/26\nIPNetwork   : 192.168.0.0/25\n```\n\n---\n\n### Example 18 (IPv6)\n\nIPv6 networks\n\n```JS\nC:\\\u003e ipnetwork.exe 2001:0db8::/128\nIPNetwork   : 2001:db8::/128\nNetwork     : 2001:db8::\nNetmask     : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff\nCidr        : 128\nBroadcast   : 2001:db8::\nFirstUsable : 2001:db8::\nLastUsable  : 2001:db8::\nUsable      : 0\nTotal       : 1\n```\n\nHave fun !\n\n## License\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Flduchosal%2Fipnetwork.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Flduchosal%2Fipnetwork?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flduchosal%2Fipnetwork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flduchosal%2Fipnetwork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flduchosal%2Fipnetwork/lists"}