Back to home

Subnet Generator

Files

subnetgen.py (1.37 KB)

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