Python: Subnet and Host Capacity Calculator
Puedes ver este scripte en Github
#!/usr/bin/env python3
import ipaddress
import sys
def analyze_network(ip_range, new_prefix=None):
try:
network = ipaddress.ip_network(ip_range, strict=False)
except ValueError as e:
print(f"Error: {e}")
return
print(f"\nOriginal Network: {network}")
print(f" Network Address: {network.network_address}")
print(f" Broadcast Address: {network.broadcast_address}")
print(f" Subnet Mask: /{network.prefixlen}")
print(f" Usable Hosts: {network.num_addresses - 2}")
if new_prefix:
new_prefix = int(new_prefix)
if new_prefix > network.prefixlen:
subnets = list(network.subnets(new_prefix=new_prefix))
print(f"\nSubnets with /{new_prefix}: {len(subnets)}")
print(f" Hosts per Subnet: {subnets[0].num_addresses - 2}")
else:
print("\nWarning: New prefix must be larger than the original to create subnets.")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python3 ip_analyzer.py <ip_range> [new_prefix]")
sys.exit(1)
ip_range = sys.argv[1]
new_prefix = sys.argv[2] if len(sys.argv) > 2 else None
analyze_network(ip_range, new_prefix)
Explicación línea por línea de ip_analyzer.py
ip_analyzer.pyIndica que el script debe ejecutarse con el intérprete de Python 3.
Importa los módulos necesarios:
ipaddresspara manipulación de redes IP.syspara acceder a argumentos desde la línea de comandos.
Define una función llamada analyze_network que recibe un rango IP y opcionalmente un nuevo prefijo de subred.
Intenta crear una red a partir del rango IP ingresado. Si hay un error de formato, lo muestra y termina la función.
Imprime la información principal de la red:
Red
Dirección de red
Dirección de broadcast
Máscara de subred
Cantidad de hosts usables (excluye dirección de red y broadcast)
Si se proporciona un nuevo prefijo:
Lo convierte a entero.
Verifica que sea mayor que el prefijo original (para poder subdividir).
Calcula cuántas subredes se pueden generar y cuántos hosts tiene cada una.
Si el prefijo no es válido, muestra una advertencia.
Este bloque se ejecuta solo si el script se corre directamente (no si se importa como módulo).
Verifica que al menos se haya pasado un argumento desde la consola. Si no, muestra un mensaje de uso y termina el programa.
Toma los argumentos:
ip_range: primer argumento.new_prefix: segundo argumento, si existe. Luego llama a la funciónanalyze_networkcon esos valores.
Last updated