2014-06-13 5 views
6

Wie kann ich eine CIDR-Notation erhalten, die einen Bereich von IP-Adressen darstellt, wenn man die Anfangs-und End-IP-Adressen des Bereichs in Python verwendet? Ich kann CIDR zum IP-Bereich finden, aber kann keinen Code für das Gegenteil finden.IP-Bereich zu CIDR-Konvertierung in Python?

Beispiel des gewünschten Ausgangs:

startip = '63.223.64.0' 
endip = '63.223.127.255' 

return '63.223.64.0/18' 

Antwort

10

Sie iprange_to_cidrs von netaddr Modul verwenden. Beispiel:

cidrs = netaddr.iprange_to_cidrs(startip, endip) 

Hier sind die offiziellen Dokumente: https://netaddr.readthedocs.io/

+0

cidrs = netaddr.ip_range_to_cidrs (IP1, IP2) Attribute: 'Modul' Objekt hat kein Attribut 'ip_range_to_cidrs' –

+1

@ChrisHall Sorry für den Tippfehler, ich habe meine Antwort aktualisiert. –

+1

So geht's in Python3: ipdress import ip_address, summarize_address_range; start, Ende = IP-Adresse (StartIP), IP-Adresse (Endip); return summarize_address_range (Anfang, Ende). – JJC

2

Ab Python 3.3 die gebündelte ipaddress zur Verfügung stellen kann, was Sie wollen. Die Funktion summarize_address_range einen Iterator mit den Netzwerken liefert von Anfang an führt, beenden Sie an:

>>> 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')]