2014-06-13 15 views
6

Python'da aralığın başlangıç ​​ve bitiş IP adresleri göz önüne alındığında, bir dizi IP adresini temsil eden bir CIDR gösterimine nasıl ulaşabilirim? CIDR'yi IP Aralığı'na bulabilirim, ancak tersine herhangi bir kod bulamıyorum. istenen çıktıIP Aralığı Python'da CIDR dönüşümüne mi?

Örnek:

startip = '63.223.64.0' 
endip = '63.223.127.255' 

return '63.223.64.0/18' 

cevap

10

için netaddr modülü tarafından sağlanan iprange_to_cidrs kullanabilir. Örnek: istediğini sağlayabilir paketlenmiş ipaddress Python 3.3 başlayarak https://netaddr.readthedocs.io/

+0

cidrs = netaddr.ip_range_to_cidrs (IP1, IP2) AttributeError: 'modülü' nesne vardır hiçbir özellik 'ip_range_to_cidrs' –

+1

@ChrisHall Yazım hatası için üzgünüm, cevabımı güncelledim. –

+1

Python3'te nasıl yapılacağı: ipaddress import ip_address, summarize_address_range; start, end = ip_address (startip), ip_address (endip); summarize_address_range (başlangıç, bitiş). – JJC

2

: Burada

cidrs = netaddr.iprange_to_cidrs(startip, endip) 

resmi belgeler bulunmaktadır. baştan çıkan ağlarla bir yineleyici döndürür summarize_address_range işlevi, belirttiğiniz sona:

>>> 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')] 
İlgili konular