Package: netcalc
Advanced network calculator and address planning helper.NetCalc is a tool made by network admins, for network admins. It supports
adding (aggregating) networks, subtracting a network from a larger network,
doing addition and subtraction of multiple networks at once, and more
functionality is to come in future releases.NetCalc supports both IPv4 and IPv6, and works very efficiently even with very
large networks. It uses the excellentnetaddrlibrary for the core address
manipulation.This program requires either Python 3 (recommended) or Python 2.ContentsUsageadd commandadd-file commandsub commandsplit commandexpr commandinfo commandExpanding arguments from a text fileInstallingUsing pipFrom the operating system’s package managerFrom sourceFuture plansContactLicenseUsageUsing NetCalc is quite simple. All functionality is split into commands, each
of which receive their own set of specific arguments.add commandAdd networks, aggregating as much as possible.$ netcalc add 198.18.0.0/24 198.18.1.0/24 10.1/16 10/16
10.0.0.0/15
198.18.0.0/23This command can be very useful e.g. for calculating a minimal set of prefixes
to announce with BGP.Another real-life example would be comparing the routing tables from two
separate routers (each with prefixes broken up in different ways), to see if
they are equivalent (both cover the same networks). If the aggregate from one
router matches the aggregate from the other, then they are indeed equivalent.add-file commandAdd networks from a file, aggregating as much as possible.This is a variant of theaddcommand above, which reads the networks from a
file (one per line). For example, given the following file:networks.txt198.18.0.0/24
198.18.1.0/24
10.1/16
10/16These networks could be added like so:$ netcalc add-file networks.txt
10.0.0.0/15
198.18.0.0/23sub commandSubtract a network from another, splitting as necessary.$ netcalc sub 192.0.2.0/24 192.0.2.0/28
192.0.2.16/28
192.0.2.32/27
192.0.2.64/26
192.0.2.128/25split commandSplit a network into subnets of a certain length.$ netcalc split 198.18.64.0/18 20
198.18.64.0/20
198.18.80.0/20
198.18.96.0/20
198.18.112.0/20It is also possible to do a hierarchical split, showing all the steps from a
certain length to a specified maximum length:$ netcalc split 198.18.64.0/18 19 21
198.18.64.0/19
  198.18.64.0/20
    198.18.64.0/21
    198.18.72.0/21
  198.18.80.0/20
    198.18.80.0/21
    198.18.88.0/21
198.18.96.0/19
  198.18.96.0/20
    198.18.96.0/21
    198.18.104.0/21
  198.18.112.0/20
    198.18.112.0/21
    198.18.120.0/21expr commandAdd and subtract networks using an arbitrarily long mathematical expression.$ netcalc expr 2001:db8::/34 - 2001:db8::/38 + 2001:db8:100::/41
2001:db8:100::/41
2001:db8:400::/38
2001:db8:800::/37
2001:db8:1000::/36
2001:db8:2000::/35info commandProvide static information about a network. Shows the network address, netmask,
first and last addresses, and so on.$ netcalc info 2001:db8::8000:0:0:a:5/56
Compact address   - 2001:db8:0:8000::a:5
Expanded address  - 2001:0db8:0000:8000:0000:0000:000a:0005
Address type      - Global Unicast
Network address   - 2001:db8:0:8000::/56
Network mask      - ffff:ffff:ffff:ff00:0:0:0:0
Prefix length     - 56
Host wildcard     - 0:0:0:ff:ffff:ffff:ffff:ffff
Broadcast address - N/A
Address count     - 4722366482869645213696
First address     - 2001:0db8:0000:8000:0000:0000:0000:0000
Last address      - 2001:0db8:0000:80ff:ffff:ffff:ffff:ffffExpanding arguments from a text fileIt is possible to expand command-line arguments from a text file, for any
command, by referencing the filename with a@placeholder. The file’s
contents will be read and inserted as though they had been typed at the
command-line. Each line of text will turn into a separate command line
argument.Argument expansion is useful for commands which don’t already support receiving
a filename from which to read their arguments. Using this, it is possible for
example to calculate an arbitrarily long expression with theexprcommand.For example, given the following file:/tmp/math-arguments.txt2001:db8::/34
-
2001:db8::/38
+
2001:db8:100::/41This expression could be calculated like so:$ netcalc expr @/tmp/math-arguments.txt
2001:db8:100::/41
2001:db8:400::/38
2001:db8:800::/37
2001:db8:1000::/36
2001:db8:2000::/35It is even possible (albeit perhaps farfetched) to specify the actual command
within the argument file:/tmp/arguments.txtsub
10.0.0.0/24
10.0.0.64/27Which would yield:$ netcalc @arguments.txt
10.0.0.0/26
10.0.0.96/27
10.0.0.128/25Of course, it would also be possible to use argument expansion to read networks
from a file as arguments into theaddcommand. However, this would be rather
redundant, as it is equivalent to just using theadd-filecommand,
exemplified above.Given the file:networks.txt198.18.0.0/24
198.18.1.0/24
10.1/16
10/16These networks could be added like so:$ netcalc add @networks.txt
10.0.0.0/15
198.18.0.0/23InstallingUsing pipThe easiest, portable, way to install NetCalc is through the officialPython Package Index, using a package manager such aspip:$ sudo pip install netcalcThis will install NetCalc globally, and take care of installing all necessary
dependencies first.It is also possible to install only to the local user’s environment, without
changing the global system:$ pip install --user netcalcThis will install NetCalc in the user’s environment, which can be e.g. in~/.localin GNU/Linux, UNIX and Mac OSX, or%APPDATA%\Pythonin
Windows. You will need to runnetcalcfrom within the user environment: on
GNU/Linux for example, this will be~/.local/bin/netcalc.From the operating system’s package managerThere are packages available for Debian Jessie (.deb), which should also work
for Ubuntu Linux:python-netcalc(for Python 2)python3-netcalc(for Python 3)A package for Gentoo Linux (ebuild) is also planned for future releases.From sourceNetCalc can also be run directly from the source directory, as long as the
requirements are already installed.The only requirement isnetaddr. On a Debian or Ubuntu system, install thepython3-netaddrpackage (for Python 3), orpython-netaddr(for Python
2). On a Gentoo system, installdev-python/netaddr.To run from source, just execute./netcalc.pyfrom within the root of the
source directory:$ cd netcalc
$ ./netcalc.py add 10.0.0.24/29 10.0.0.16/29
10.0.0.16/28Future plansFuture plans for NetCalc include, in no particular order:new command for static information (netmask/bitmask, IP range)new command for WHOIS queriesmake expr command more generic, allow e.g. splitting subnetsability to read networks from file in different formats (CSV, etc.)create packages for common GNU/Linux distributions, and installer for Windows???Suggestions are quite welcome :)ContactNetCalc is developed by Israel G. Lugo <israel.lugo@lugosys.com>. Main
repository for cloning, submitting issues and/or forking is athttps://github.com/israel-lugo/netcalcLicenseCopyright (C) 2016, 2017 Israel G. Lugo <israel.lugo@lugosys.com>NetCalc is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.NetCalc is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with NetCalc.  If not, see <http://www.gnu.org/licenses/>.