IP calculator
Here's some new subcommand ideas:
-
ipinfo calc <expr> -
ipinfo ip2n(ip to number) -
ipinfo n2ip(number to ip - v4 if it fits, v6 otherwise, with an option to force v6) -
ipinfo n2ip6(forced ipv6 version ofn2ip).
The <expr> for the calc subcmd can be an infix mathematical expression that supports (, ), ^, *, /, +, - - PEMDAS - integers, and IP addresses.
For example:
$ ipinfo calc '2*(1.1.1.0 + 2)'
$ ipinfo calc '::/2'
$ ipinfo calc '2*2' # even this can work just fine
We just need to convert the IPs to numbers, convert the infix to postfix, and then execute a simple stack-based algorithm to calculate the resulting postfix expression.
One confusion about it is that the / and - operators are used in IP-related notations like CIDRs and Ranges already, so that could look a little weird. It'd be a problem if we wanted to support mathematical operations on cidrs/ranges only though I suppose.
I think there's a lot more interesting operations to be done with IPs than the basic math ops above.
cc @coderholic