I was learning subnetting and instead of manually doing the formula every time I need to create new subnets, I decided to write a Python script to help.
import ipaddress
current = input("Current network (with prefix): ")
new_prefix = int(input("New prefix "))
network = ipaddress.ip_network(current, strict=False)
if new_prefix <= network.prefixlen:
print("New prefix must be larger than the current prefix")
exit()
borrowed_bits = new_prefix - network.prefixlen
subnets = list(network.subnets(new_prefix=new_prefix))
hosts_per_subnet = max(0, subnets[0].num_addresses - 2)
print(f"original network : {network}")
print(f"original mask : {network.netmask}")
print(f"new prefix : /{new_prefix}")
print(f"new subnet mask : {subnets[0].netmask}")
print(f"borrowed bits : {borrowed_bits}")
print(f"subnets created : {len(subnets)}")
print(f"hosts per subnet : {hosts_per_subnet}")
for i, subnet in enumerate(subnets, start=1):
hosts = list(subnet.hosts())
if hosts:
first_host = hosts[0]
last_host = hosts[-1]
else:
first_host = "N/A"
last_host = "N/A"
print(f"\nSubnet {i}")
print(f"network address : {subnet.network_address}")
print(f"subnet mask : {subnet.netmask}")
print(f"prefix : /{subnet.prefixlen}")
print(f"first host : {first_host}")
print(f"last host : {last_host}")
print(f"broadcast : {subnet.broadcast_address}")
print(f"usable hosts : {hosts_per_subnet}")
This will generate:
Current network (with prefix): 192.168.1.0/24
New prefix 26
original network : 192.168.1.0/24
original mask : 255.255.255.0
new prefix : /26
new subnet mask : 255.255.255.192
borrowed bits : 2
subnets created : 4
hosts per subnet : 62
Subnet 1
network address : 192.168.1.0
subnet mask : 255.255.255.192
prefix : /26
first host : 192.168.1.1
last host : 192.168.1.62
broadcast : 192.168.1.63
usable hosts : 62
Subnet 2
network address : 192.168.1.64
subnet mask : 255.255.255.192
prefix : /26
first host : 192.168.1.65
last host : 192.168.1.126
broadcast : 192.168.1.127
usable hosts : 62
Subnet 3
network address : 192.168.1.128
subnet mask : 255.255.255.192
prefix : /26
first host : 192.168.1.129
last host : 192.168.1.190
broadcast : 192.168.1.191
usable hosts : 62
Subnet 4
network address : 192.168.1.192
subnet mask : 255.255.255.192
prefix : /26
first host : 192.168.1.193
last host : 192.168.1.254
broadcast : 192.168.1.255
usable hosts : 62