In un precedente articolo, abbiamo analizzato i concetti di subnetting di una rete. Calcolare l’indirizzo di broadcast, la wildcard mask o il range di host utilizzabili richiede attenzione, specialmente quando si lavora con maschere non standard.
Vediamo come automatizzare questo processo creando uno script Python che genera un report completo e formattato come tabella, partendo da un semplice parametro CIDR sfruttando la libreria standard ipaddress.
Lo script: da CIDR a “tabella”
L’obiettivo è passare una subnet come parametro (es: 192.168.1.0/24) e ottenere un output tabellare direttamente nel terminale che riporti i dati della subnet (indirizzo di broadcast, wildcard mask, range di host utilizzabili, …)
import ipaddress
import sys
def calcola_subnet_tabella(indirizzo_cidr):
try:
# strict=False gestisce input come 192.168.1.10/24
rete = ipaddress.ip_network(indirizzo_cidr, strict=False)
host_utilizzabili = list(rete.hosts())
# Dati da visualizzare
dati = [
("Indirizzo CIDR", str(rete)),
("Netmask", str(rete.netmask)),
("Wildcard Mask", str(rete.hostmask)),
("Indirizzo Rete", str(rete.network_address)),
("Broadcast", str(rete.broadcast_address)),
("Primo Host", str(host_utilizzabili[0]) if host_utilizzabili else "N/A"),
("Ultimo Host", str(host_utilizzabili[-1]) if host_utilizzabili else "N/A"),
("Totale Host", str(max(0, rete.num_addresses - 2)))
]
# Formattazione Tabella
print(f"\nReport Sottorete: {indirizzo_cidr}")
print("+" + "-"*20 + "+" + "-"*25 + "+")
print(f"| {'Parametro':<18} | {'Valore':<23} |")
print("+" + "-"*20 + "+" + "-"*25 + "+")
for label, valore in dati:
print(f"| {label:<18} | {valore:<23} |")
print("+" + "-"*20 + "+" + "-"*25 + "+")
except ValueError as e:
print(f"Errore: '{indirizzo_cidr}' non è valido. ({e})")
if __name__ == "__main__":
if len(sys.argv) > 1:
calcola_subnet_tabella(sys.argv[1])
else:
print("Utilizzo: python SubnetCalculator.py <indirizzo/maschera>")La sintassi dello script è molto semplice
$ python SubnetCalculator.py 207.234.189.123/23
Report Sottorete: 207.234.189.123/23
+--------------------+-------------------------+
| Parametro | Valore |
+--------------------+-------------------------+
| Indirizzo CIDR | 207.234.188.0/23 |
| Netmask | 255.255.254.0 |
| Wildcard Mask | 0.0.1.255 |
| Indirizzo Rete | 207.234.188.0 |
| Broadcast | 207.234.189.255 |
| Primo Host | 207.234.188.1 |
| Ultimo Host | 207.234.189.254 |
| Totale Host | 510 |
+--------------------+-------------------------+
