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:


 




 
Conclusión: Con este script ganaremos tiempo y energía a tener que hacer calculos para obtener la dirección de red, Máscara, Broadcast, etc

Comentarios

Entradas populares de este blog

EVE-NG: Instalación de EVE-NG

Fortigate: Capturar paquetes (Packet capture/sniffer)

Cisco ISE | Certificados SSL públicos para Guest Portal