1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
# cidr
 [](https://pkg.go.dev/github.com/bschaatsbergen/cidr)
Simplifies IPv4/IPv6 CIDR network prefix management with counting, overlap checking, explanation, and subdivision.
## Brew
To install cidr using brew, simply run:
```sh
brew install cidr
```
## Debian (Trixie and newer) & Ubuntu (Oracular and newer)
To install cidr using apt, simply run:
```sh
apt install cidr
```
## Binaries
You can download the [latest binary](https://github.com/bschaatsbergen/cidr/releases/latest) for Linux, MacOS, and Windows.
## Examples
Using `cidr` is very simple.
### Explain a CIDR range
To get more information on a CIDR range:
```
$ cidr explain 10.0.0.0/16
Base Address: 10.0.0.0
Usable Address Range: 10.0.0.1 to 10.0.255.254 (65,534)
Broadcast Address: 10.0.255.255
Addresses: 65,536
Netmask: 255.255.0.0 (/16 bits)
```
This also works with IPv6 CIDR ranges, for example:
```
$ cidr explain 2001:db8:1234:1a00::/110
Base Address: 2001:db8:1234:1a00::
Usable Address Range: 2001:db8:1234:1a00:: to 2001:db8:1234:1a00::3:ffff (262,142)
Addresses: 262,144
Netmask: ffff:ffff:ffff:ffff:ffff:ffff:fffc:0 (/110 bits)
```
### Check whether an address belongs to a CIDR range
To check if a CIDR range contains an IP:
```
$ cidr contains 10.0.0.0/16 10.0.14.5
true
```
This also works with IPv6 addresses, for example:
```
$ cidr contains 2001:db8:1234:1a00::/106 2001:db8:1234:1a00::
true
```
### Count
To get a count of all addresses in a CIDR range:
```
$ cidr count 10.0.0.0/16
65536
```
This also works with a IPv6 CIDR range, for example:
```
$ cidr count 2001:db8:1234:1a00::/106
4194304
```
Or with a large prefix like a point-to-point link CIDR range:
```
$ cidr count 172.16.18.0/31
2
```
### CIDR range intersection
To check if a CIDR range overlaps with another CIDR range:
```
$ cidr overlaps 10.0.0.0/16 10.0.14.0/22
true
```
This also works with IPv6 CIDR ranges, for example:
```
$ cidr overlaps 2001:db8:1111:2222:1::/80 2001:db8:1111:2222:1:1::/96
true
```
### CIDR division
To divide a CIDR range into N distinct networks:
```
$ cidr divide 10.0.0.0/16 9
10.0.0.0/20
10.0.16.0/20
10.0.32.0/20
10.0.48.0/20
10.0.64.0/20
10.0.80.0/20
10.0.96.0/20
10.0.112.0/20
10.0.128.0/20
```
This also works with IPv6 CIDR ranges, for example:
```
$ cidr divide 2001:db8:1111:2222:1::/80 9
2001:db8:1111:2222:1::/84
2001:db8:1111:2222:1:1000::/84
2001:db8:1111:2222:1:2000::/84
2001:db8:1111:2222:1:3000::/84
2001:db8:1111:2222:1:4000::/84
2001:db8:1111:2222:1:5000::/84
2001:db8:1111:2222:1:6000::/84
2001:db8:1111:2222:1:7000::/84
2001:db8:1111:2222:1:8000::/84
```
## Contributing
Contributions are highly appreciated and always welcome.
Have a look through existing [Issues](https://github.com/bschaatsbergen/cidr/issues) and [Pull Requests](https://github.com/bschaatsbergen/cidr/pulls) that you could help with.
|