Skip to content

Instantly share code, notes, and snippets.

@goffinet
Forked from vndmtrx/subnet.py
Created February 21, 2021 16:20
Show Gist options
  • Save goffinet/7489b2cf67b515fe75c65bf6b98d46c8 to your computer and use it in GitHub Desktop.
Save goffinet/7489b2cf67b515fe75c65bf6b98d46c8 to your computer and use it in GitHub Desktop.
Python 3 simple subnet calculator
#!/usr/bin/env python3
# Use: ./subnet.py <ip/cidr>
# Alt: ./subnet.py <ip> <mask>
import sys
if __name__=="__main__":
addr = [0, 0, 0, 0]
mask = [0, 0, 0, 0]
cidr = 0
if len(sys.argv) == 2:
(addr, cidr) = sys.argv[1].split('/')
addr = [int(x) for x in addr.split(".")]
cidr = int(cidr)
mask = [( ((1<<32)-1) << (32-cidr) >> i ) & 255 for i in reversed(range(0, 32, 8))]
elif len(sys.argv) == 3:
addr = sys.argv[1]
mask = sys.argv[2]
addr = [int(x) for x in addr.split(".")]
mask = [int(x) for x in mask.split(".")]
cidr = sum((bin(x).count('1') for x in mask))
else:
print("Use: {0} <ip/cidr>".format(sys.argv[0]))
print("Alt: {0} <ip> <mask>".format(sys.argv[0]))
sys.exit(-1)
netw = [addr[i] & mask[i] for i in range(4)]
bcas = [(addr[i] & mask[i]) | (255^mask[i]) for i in range(4)]
print("Address: {0}".format('.'.join(map(str, addr))))
print("Mask: {0}".format('.'.join(map(str, mask))))
print("Cidr: {0}".format(cidr))
print("Network: {0}".format('.'.join(map(str, netw))))
print("Broadcast: {0}".format('.'.join(map(str, bcas))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment