2014-06-13 18 views
6

Come posso ottenere una notazione CIDR che rappresenta un intervallo di indirizzi IP, dati gli indirizzi IP iniziali e finali dell'intervallo, in Python? Riesco a trovare CIDR su intervallo IP ma non riesco a trovare alcun codice per il contrario.Intervallo IP alla conversione CIDR in Python?

Esempio di uscita desiderato

startip = '63.223.64.0' 
endip = '63.223.127.255' 

return '63.223.64.0/18' 

risposta

10

Puoi svolgere iprange_to_cidrs fornito dal modulo netaddr. Esempio:

cidrs = netaddr.iprange_to_cidrs(startip, endip) 

Ecco i documenti ufficiali: https://netaddr.readthedocs.io/

+0

cidrs = netaddr.ip_range_to_cidrs (IP1, IP2) AttributeError: 'modulo' oggetto non ha attributo 'ip_range_to_cidrs' –

+1

@ChrisHall Scusa per l'errore di battitura, ho aggiornato la mia risposta. –

+1

Ecco come farlo in Python3: da ipaddress import ip_address, summarize_address_range; start, end = ip_address (startip), ip_address (endip); return summarize_address_range (inizio, fine). – JJC

2

partire Python 3.3 il bundle ipaddress in grado di fornire ciò che si desidera. La funzione summarize_address_range restituisce un iteratore con le reti derivanti dalla all'inizio, alla fine si specifica:

>>> startip = ipaddress.IPv4Address('63.223.64.0') 
>>> endip = ipaddress.IPv4Address('63.223.127.255') 
>>> [ipaddr for ipaddr in ipaddress.summarize_address_range(startip, endip)] 
[IPv4Network('63.223.64.0/18')] 
Problemi correlati