Skip to content

CLI CIDR calculator for IPv4 and IPv6

Calculate Network Ranges for a given CIDR (IPv4 and IPv6)

Crates.io Version CI

For example, cidit 10.122.33.44/24 prints out the following information:

 ip_ver   cidr              address        prefix   network       first_usable   last_usable     broadcast       available   netmask   hostmask
 v4       10.122.33.44/24   10.122.33.44   24       10.122.33.0   10.122.33.1    10.122.33.254   10.122.33.255

CIDR stands for Classless Inter-Domain Routing. Learn more about CIDR on AWS or on Wikipedia.

Install

With Homebrew (recommended)

brew tap hex22a/cidit
brew install cidit

Binaries

Check out Releases page to find binaries for Your platform

Usage

# cidit --help to get more usage info
cidit 10.122.33.44/24

Supports multiple CIDRs

cidit 10.122.33.44/24 10.255.55.66/20 2001:db8:1::ab9:c0a8:102/64

Output:

 ip_ver   cidr                          address                    prefix   network        first_usable   last_usable     broadcast       available   netmask                 hostmask
 v4       10.122.33.44/24               10.122.33.44               24       10.122.33.0    10.122.33.1    10.122.33.254   10.122.33.255
 v4       10.255.55.66/20               10.255.55.66               20       10.255.48.0    10.255.48.1    10.255.63.254   10.255.63.255
 v6       2001:db8:1::ab9:c0a8:102/64   2001:db8:1::ab9:c0a8:102   64       2001:db8:1::                                                  2^64        ffff:ffff:ffff:ffff::   ::ffff:ffff:ffff:ffff

Different output formats

cidit -f json 10.122.33.44/24
# Prints: {"version":2,"data":[{"ip_version":"v4","cidr":"10.122.33.44/24","address":"10.122.33.44","prefix_length":24,"first_usable":"10.122.33.1","last_usable":"10.122.33.254","network":"10.122.33.0","broadcast":"10.122.33.255"}]}

Pretty print:

cidit -f json -p 10.122.33.44/24

Output:

{
  "version": 2,
  "data": [
    {
      "ip_version": "v4",
      "cidr": "10.122.33.44/24",
      "address": "10.122.33.44",
      "prefix_length": 24,
      "first_usable": "10.122.33.1",
      "last_usable": "10.122.33.254",
      "network": "10.122.33.0",
      "broadcast": "10.122.33.255"
    }
  ]
}

ndjson:

cidit 10.122.33.44/24 10.255.55.66/20 2001:db8:1::ab9:c0a8:102/64 -f ndjson

{"ip_version":"v4","cidr":"10.122.33.44/24","address":"10.122.33.44","prefix_length":24,"first_usable":"10.122.33.1","last_usable":"10.122.33.254","network":"10.122.33.0","broadcast":"10.122.33.255"}
{"ip_version":"v4","cidr":"10.255.55.66/20","address":"10.255.55.66","prefix_length":20,"first_usable":"10.255.48.1","last_usable":"10.255.63.254","network":"10.255.48.0","broadcast":"10.255.63.255"}
{"ip_version":"v6","cidr":"2001:db8:1::ab9:c0a8:102/64","address":"2001:db8:1::ab9:c0a8:102","prefix_length":64,"netmask":"ffff:ffff:ffff:ffff::","hostmask":"::ffff:ffff:ffff:ffff","network":"2001:db8:1::","subnet_size":"2^64"}

CIDR from a range

Use --range option and provide a range to find a CIDR that fits the range. Supported formats: ip..ip, ip-ip, ip ip. By default it finds a smallest CIDR that fits the entire range.

cidit -r 10.0.0.10..10.0.0.20
10.0.0.0/27

To find an exact match use --exact option

cidit -er 10.0.0.10..10.0.0.20
10.0.0.10/31
10.0.0.12/30
10.0.0.16/30
10.0.0.20/32

Parallel execution

cidit is a single-threaded app. To not confuse the users it will not support concurrent jobs. However, If You want to process large amount of data You can do so with tools like GNU parallel or xargs

parallel cidit -H ::: 10.122.33.44/24 10.255.55.66/20 2001:db8:1::ab9:c0a8:102/64
echo 10.122.33.44/24 10.255.55.66/20 2001:db8:1::ab9:c0a8:102/64 | xargs -n 1 -P0 cidit -H

Compile from sources

Install Rust

Clone this repo:

git clone git@github.com:hex22a/cidit.git && cd ./cidit

Run tests:

cargo test

Build the binary

cargo build

This will create a binary in target > debug directory

About

CIDR Inspection Tool

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages