-
-
Save xero/1cc1d623a472417c0665f4fab365df86 to your computer and use it in GitHub Desktop.
CIDR - the CIDR block calc & cheatsheet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# CIDR - the CIDR block calc & cheatsheet | |
# CC0 xero | https://x-e.ro | https://github.com/xero | |
usage() { | |
EXITCODE=0 | |
if [ -n "$1" ] && [ "$1" -eq "$1" ] 2>/dev/null; then | |
EXITCODE=$1 | |
fi | |
me="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")" | |
echo "usage: ${me} [-c|-i IP CIDR|-n IP]" | |
echo " [--chart] display the CIDR chart" | |
echo " [--in IP CIDR] checks if an ip in a given CIDR" | |
echo " [--netmask IP] returns the netmask of a given CIDR" | |
exit "$EXITCODE" | |
} | |
# check if required commands/bins exist | |
function isinstalled() { | |
builtin type -P "$1" &> /dev/null || { | |
echo >&2 "'$1' dependancy required"; exit 1 | |
} | |
} | |
# print the CIDR cheatsheet | |
chart() { | |
cat << X0 | |
Netmask Netmask (binary) CIDR Notes | |
_____________________________________________________________________________ | |
255.255.255.255 11111111.11111111.11111111.11111111 /32 Host (single addr) | |
255.255.255.254 11111111.11111111.11111111.11111110 /31 Unuseable | |
255.255.255.252 11111111.11111111.11111111.11111100 /30 2 useable | |
255.255.255.248 11111111.11111111.11111111.11111000 /29 6 useable | |
255.255.255.240 11111111.11111111.11111111.11110000 /28 14 useable | |
255.255.255.224 11111111.11111111.11111111.11100000 /27 30 useable | |
255.255.255.192 11111111.11111111.11111111.11000000 /26 62 useable | |
255.255.255.128 11111111.11111111.11111111.10000000 /25 126 useable | |
255.255.255.0 11111111.11111111.11111111.00000000 /24 "Class C" 254 useable | |
255.255.254.0 11111111.11111111.11111110.00000000 /23 2x Class C's = 510 usable | |
255.255.252.0 11111111.11111111.11111100.00000000 /22 4x Class C's = 1022 usable | |
255.255.248.0 11111111.11111111.11111000.00000000 /21 8x Class C's = 2046 usable | |
255.255.240.0 11111111.11111111.11110000.00000000 /20 16x Class C's = 4094 usable | |
255.255.224.0 11111111.11111111.11100000.00000000 /19 32x Class C's = 8190 usable | |
255.255.192.0 11111111.11111111.11000000.00000000 /18 64x Class C's = 16382 usable | |
255.255.128.0 11111111.11111111.10000000.00000000 /17 128x Class C's = 32766 usable | |
255.255.0.0 11111111.11111111.00000000.00000000 /16 "Class B" 65534 usable | |
255.254.0.0 11111111.11111110.00000000.00000000 /15 2x Class B's = 131070 usable | |
255.252.0.0 11111111.11111100.00000000.00000000 /14 4x Class B's = 262142 usable | |
255.248.0.0 11111111.11111000.00000000.00000000 /13 8x Class B's = 524286 usable | |
255.240.0.0 11111111.11110000.00000000.00000000 /12 16x Class B's = 1048574 usable | |
255.224.0.0 11111111.11100000.00000000.00000000 /11 32x Class B's = 2097150 usable | |
255.192.0.0 11111111.11000000.00000000.00000000 /10 64x Class B's = 4194302 usable | |
255.128.0.0 11111111.10000000.00000000.00000000 /9 128x Class B's = 8388606 usable | |
255.0.0.0 11111111.00000000.00000000.00000000 /8 "Class A" 16777214 | |
254.0.0.0 11111110.00000000.00000000.00000000 /7 | |
252.0.0.0 11111100.00000000.00000000.00000000 /6 | |
248.0.0.0 11111000.00000000.00000000.00000000 /5 | |
240.0.0.0 11110000.00000000.00000000.00000000 /4 | |
224.0.0.0 11100000.00000000.00000000.00000000 /3 | |
192.0.0.0 11000000.00000000.00000000.00000000 /2 | |
128.0.0.0 10000000.00000000.00000000.00000000 /1 | |
0.0.0.0 00000000.00000000.00000000.00000000 /0 IP space | |
Net Host Total | |
Net Addr Addr Addr Number | |
Class Range NetMask Bits Bits of hosts | |
---------------------------------------------------------- | |
A 0-127 255.0.0.0 /8 24 16777216 (i.e. 114.0.0.0) | |
B 128-191 255.255.0.0 /16 16 65536 (i.e. 150.0.0.0) | |
C 192-254 255.255.255.0 /24 8 256 (i.e. 199.0.0.0) | |
D 224-239 (multicast) | |
E 240-255 (reserved) | |
F 208-215 255.255.255.240 28 4 16 | |
G 216/8 ARIN - North America | |
G 217/8 RIPE NCC - Europe | |
G 218-219/8 APNIC | |
H 220-221 255.255.255.248 29 3 8 (reserved) | |
K 222-223 255.255.255.254 31 1 2 (reserved) | |
(ref: RFC1375 & http://www.iana.org/assignments/ipv4-address-space ) | |
( http://www.iana.org/numbers.htm ) | |
---------------------------------------------------------- | |
X0 | |
} | |
# calcuate minimum netmask for a given ip | |
netmask () { | |
c=0 x=0$( printf '%o' ${1//./ } ) | |
while [ "$x" -gt 0 ]; do | |
let c+=$((x%2)) 'x>>=1' | |
done | |
echo /$c | |
} | |
# check if ip is inside a given cidr block | |
inside() { | |
[ -z "$1" ] && usage 1 | |
[ -z "$2" ] && usage 1 | |
IP=$1 | |
CIDR=$2 | |
isinstalled nmap | |
if [ $(nmap -sL -n "$CIDR" | awk '/Nmap scan report/{print $NF}' | grep "$IP") ]; then | |
echo "true" | |
exit 0 | |
else | |
echo "false" | |
exit 1 | |
fi | |
} | |
# parse command arguments | |
case "$1" in | |
--chart|"chart"|-c) | |
chart | |
;; | |
--in|"in"|-i) | |
inside "$2" "$3" | |
;; | |
--netmask|"netmask"|-n) | |
netmask "$2" | |
;; | |
*) | |
usage | |
;; | |
esac | |
# EOF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment