Python | IP Subnet Calculator
A menudo los ingenieros en redes tenemos que calcular la dirección de red, mascara y rango de hosts en base a una dirección IP + Máscara subred. Sin embargo, casi todo el mundo que conozco que gestiona direccionamiento IPs utiliza algun software del tipo Bitcricket IP calculator u otros disponibles que hay por INTERNET.
El problema viene cuando hay que hacer este ejercicio dado multiples IPs+Mascaras de red ya que hay que conlleva copiar el host y definir manualmente la máscara en la respectiva aplicación cosa que es un procedimiento muy manual desde mi opinión.
Ejemplo: Calculamos la Direccion de red, Rango de Hosts y dirección Broadcast de la siguiente IP+Netmask -> 192.168.5.27/28
Lo normal seria copiar "192.168.5.27" y pegarlo en nuestra calculadora IP preferida y luego seleccionariamos la Netmask tal cual vemos en la siguiente captura.
Sin embargo, este procedimiento es muy manual porque significa que tendremos que hacer este mismo procedimiento tantas veces como el número de hosts que haya que calcular.
Tenemos la solución con un script en python. Para ello simplemente necesitamos definir un archivos de "hosts" donde indicaremos linea por linea las IPs+Netmask a calcular:
Ejemplo archivo "hosts":
192.168.4.0/24
172.16.10.7/28
10.10.2.0/10
Después de esto, creamos un archivo en formato python (ejemplo: ip_calculator.py) y copiamos el siguiente código:
import ipaddress
f = open (r"C:\Users\angel\scripts\hosts.txt")
for line in f:
ipaddstrip = line.strip()
IP_Addr = ipaddress.ip_interface(ipaddstrip)
Net_Addr = IP_Addr.network
pref_len = IP_Addr.with_prefixlen
Mask = IP_Addr.with_netmask
wildcard = IP_Addr.hostmask
broadcast_address = Net_Addr.broadcast_address
print('Network Address : ', str(Net_Addr).split('/')[0])
print('Broadcast Address : ' , broadcast_address)
print('CIDR Notation : ', pref_len.split('/')[1])
print('Subnet Mask : ', Mask.split('/')[1])
print('Wildcard Mask : ' , wildcard)
print('First IP : ' , list(Net_Addr.hosts())[0])
print('Last IP : ' , list(Net_Addr.hosts())[-1])
print("-------------------------------\n")
Ejecutamos el script y obtendriamos este resultado:
Comentarios
Publicar un comentario