
This is a direct followup on my previous
blog posting about calculating IPs and netmasks with the tools
netmask and prips. Kurt Roeckx (via e-mail) and Niall Donegan (via
a
comment to that blog posting) both told me about the
package sipcalc, and Kurt also mentioned the
package ipcalc. Thanks for that! And since I found both useful, too,
let s put them in their own
blog posting:
Both tools,
ipcalc
and
sipcalc offer a get all information at once mode
which are not present in the previously presented tool netmask.
ipcalc
ipcalc by default outputs all information and even in ANSI colors:
$ ipcalc 192.168.96.0/21
Address: 192.168.96.0 11000000.10101000.01100 000.00000000
Netmask: 255.255.248.0 = 21 11111111.11111111.11111 000.00000000
Wildcard: 0.0.7.255 00000000.00000000.00000 111.11111111
=>
Network: 192.168.96.0/21 11000000.10101000.01100 000.00000000
HostMin: 192.168.96.1 11000000.10101000.01100 000.00000001
HostMax: 192.168.103.254 11000000.10101000.01100 111.11111110
Broadcast: 192.168.103.255 11000000.10101000.01100 111.11111111
Hosts/Net: 2046 Class C, Private Internet
(Coloured Screenshots done with ANSI HTML
Adapter from the package aha.)
You can suppress the bitwise option or directly output
HTML via
commandline options. For example
ipcalc -b -h 192.168.96.0/21
outputs the following content:
| Address: |
192.168.96.0 |
| Netmask: |
255.255.248.0 = 21 |
| Wildcard: |
0.0.7.255 |
| => |
| Network: |
192.168.96.0/21 |
| HostMin: |
192.168.96.1 |
| HostMax: |
192.168.103.254 |
| Broadcast: |
192.168.103.255 |
| Hosts/Net: |
2046 |
Class C, Private Internet |
Yes, that s an
HTML table and no preformatted text, just with a
monospaced font. (I just removed the hardcoded text color from it,
otherwise it would not look nice on dark backgrounds like in
Planet
Commandline s default color scheme.)
Like netmask, ipcalc can also deaggregate
IP ranges into largest
possible networks:
$ ipcalc 192.168.87.0 - 192.168.110.255
deaggregate 192.168.87.0 - 192.168.110.255
192.168.87.0/24
192.168.88.0/21
192.168.96.0/21
192.168.104.0/22
192.168.108.0/23
192.168.110.0/24
(
ipcalc -r 192.168.87.0 192.168.110.255 is just another
way to write this, and it results in the same output.)
To find networks with at least 20, 63 and 30
IP addresses within a /24
network, use for example:
Address: 192.0.2.0
Netmask: 255.255.255.0 = 24
Wildcard: 0.0.0.255
=>
Network: 192.0.2.0/24
HostMin: 192.0.2.1
HostMax: 192.0.2.254
Broadcast: 192.0.2.255
Hosts/Net: 254 Class C
1. Requested size: 20 hosts
Netmask: 255.255.255.224 = 27
Network: 192.0.2.128/27
HostMin: 192.0.2.129
HostMax: 192.0.2.158
Broadcast: 192.0.2.159
Hosts/Net: 30 Class C
2. Requested size: 63 hosts
Netmask: 255.255.255.128 = 25
Network: 192.0.2.0/25
HostMin: 192.0.2.1
HostMax: 192.0.2.126
Broadcast: 192.0.2.127
Hosts/Net: 126 Class C
3. Requested size: 30 hosts
Netmask: 255.255.255.224 = 27
Network: 192.0.2.160/27
HostMin: 192.0.2.161
HostMax: 192.0.2.190
Broadcast: 192.0.2.191
Hosts/Net: 30 Class C
Needed size: 192 addresses.
Used network: 192.0.2.0/24
Unused:
192.0.2.192/26
sipcalc
sipcalc is similar to ipcalc. One big difference seems to be the IPv6
support:
$ sipcalc 2001:DB8::/32
-[ipv6 : 2001:DB8::/32] - 0
[IPV6 INFO]
Expanded Address - 2001:0db8:0000:0000:0000:0000:0000:0000
Compressed address - 2001:db8::
Subnet prefix (masked) - 2001:db8:0:0:0:0:0:0/32
Address ID (masked) - 0:0:0:0:0:0:0:0/32
Prefix address - ffff:ffff:0:0:0:0:0:0
Prefix length - 32
Address type - Aggregatable Global Unicast Addresses
Network range - 2001:0db8:0000:0000:0000:0000:0000:0000 -
2001:0db8:ffff:ffff:ffff:ffff:ffff:ffff
(Thanks to Niall for the pointer to
RFC3849. :-)
It can also split up networks into smaller chunks, but only same-size
chunks, like e.g. split a /32 IPv6 network into /34 networks:
sipcalc -S34 2001:DB8::/32
-[ipv6 : 2001:DB8::/32] - 0
[Split network]
Network - 2001:0db8:0000:0000:0000:0000:0000:0000 -
2001:0db8:3fff:ffff:ffff:ffff:ffff:ffff
Network - 2001:0db8:4000:0000:0000:0000:0000:0000 -
2001:0db8:7fff:ffff:ffff:ffff:ffff:ffff
Network - 2001:0db8:8000:0000:0000:0000:0000:0000 -
2001:0db8:bfff:ffff:ffff:ffff:ffff:ffff
Network - 2001:0db8:c000:0000:0000:0000:0000:0000 -
2001:0db8:ffff:ffff:ffff:ffff:ffff:ffff
-
Similar thing with IPv4:
sipcalc -s27 192.0.2.0/24
-[ipv4 : 192.0.2.0/24] - 0
[Split network]
Network - 192.0.2.0 - 192.0.2.31
Network - 192.0.2.32 - 192.0.2.63
Network - 192.0.2.64 - 192.0.2.95
Network - 192.0.2.96 - 192.0.2.127
Network - 192.0.2.128 - 192.0.2.159
Network - 192.0.2.160 - 192.0.2.191
Network - 192.0.2.192 - 192.0.2.223
Network - 192.0.2.224 - 192.0.2.255
sipcalc also has a show me all information mode with the -a option:
$ sipcalc -a 192.168.96.0/21
-[ipv4 : 192.168.96.0/21] - 0
[Classfull]
Host address - 192.168.96.0
Host address (decimal) - 3232260096
Host address (hex) - C0A86000
Network address - 192.168.96.0
Network class - C
Network mask - 255.255.255.0
Network mask (hex) - FFFFFF00
Broadcast address - 192.168.96.255
[CIDR]
Host address - 192.168.96.0
Host address (decimal) - 3232260096
Host address (hex) - C0A86000
Network address - 192.168.96.0
Network mask - 255.255.248.0
Network mask (bits) - 21
Network mask (hex) - FFFFF800
Broadcast address - 192.168.103.255
Cisco wildcard - 0.0.7.255
Addresses in network - 2048
Network range - 192.168.96.0 - 192.168.103.255
Usable range - 192.168.96.1 - 192.168.103.254
[Classfull bitmaps]
Network address - 11000000.10101000.01100000.00000000
Network mask - 11111111.11111111.11111111.00000000
[CIDR bitmaps]
Host address - 11000000.10101000.01100000.00000000
Network address - 11000000.10101000.01100000.00000000
Network mask - 11111111.11111111.11111000.00000000
Broadcast address - 11000000.10101000.01100111.11111111
Cisco wildcard - 00000000.00000000.00000111.11111111
Network range - 11000000.10101000.01100000.00000000 -
11000000.10101000.01100111.11111111
Usable range - 11000000.10101000.01100000.00000001 -
11000000.10101000.01100111.11111110
[Networks]
Network - 192.168.96.0 - 192.168.103.255 (current)
Thanks again to Kurt and Niall for their contributions!
Now listening to the schreimaschine and fausttanz
submissions for the interactive
competition at the B nzli/DemoDays in Olten (Switzerland)