ipaddress — Bibliothek zum Umgang mit IPv4 und IPv6¶
Quellcode: Lib/ipaddress.py
ipaddress bietet die Möglichkeit, IPv4- und IPv6-Adressen sowie -Netzwerke zu erzeugen, zu bearbeiten und mit ihnen zu arbeiten.
Die Funktionen und Klassen dieses Moduls machen verschiedene Aufgaben rund um IP-Adressen einfach: zu prüfen, ob zwei Hosts im selben Subnetz liegen, über alle Hosts eines bestimmten Subnetzes zu iterieren, zu prüfen, ob eine Zeichenkette eine gültige IP-Adresse oder Netzwerkdefinition darstellt, und so weiter.
Dies ist die vollständige API-Referenz des Moduls – für einen Überblick und eine Einführung siehe Eine Einführung in das Modul ipaddress.
Added in version 3.3.
Bequeme Factory-Funktionen¶
Das Modul ipaddress bietet Factory-Funktionen, mit denen sich IP-Adressen, Netzwerke und Schnittstellen bequem erzeugen lassen:
- ipaddress.ip_address(address)¶
Gibt je nach der als Argument übergebenen IP-Adresse ein
IPv4Address- oderIPv6Address-Objekt zurück. Zulässig sind IPv4- und IPv6-Adressen. Ganze Zahlen kleiner als2**32gelten voreingestellt als IPv4. Stellt address keine gültige IPv4- oder IPv6-Adresse dar, wirdValueErrorausgelöst.>>> ipaddress.ip_address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.ip_address('2001:db8::') IPv6Address('2001:db8::')
- ipaddress.ip_network(address, strict=True)¶
Gibt je nach der als Argument übergebenen IP-Adresse ein
IPv4Network- oderIPv6Network-Objekt zurück. address ist eine Zeichenkette oder eine ganze Zahl, die das IP-Netzwerk darstellt. Zulässig sind IPv4- und IPv6-Netzwerke. Ganze Zahlen kleiner als2**32gelten voreingestellt als IPv4. strict wird an den Konstruktor vonIPv4NetworkoderIPv6Networkweitergegeben.ValueErrorwird ausgelöst, wenn address keine gültige IPv4- oder IPv6-Adresse darstellt oder wenn im Netzwerk Host-Bits gesetzt sind.>>> ipaddress.ip_network('192.168.0.0/28') IPv4Network('192.168.0.0/28')
- ipaddress.ip_interface(address)¶
Gibt je nach der als Argument übergebenen IP-Adresse ein
IPv4Interface- oderIPv6Interface-Objekt zurück. address ist eine Zeichenkette oder eine ganze Zahl, die die IP-Adresse darstellt. Zulässig sind IPv4- und IPv6-Adressen. Ganze Zahlen kleiner als2**32gelten voreingestellt als IPv4. Stellt address keine gültige IPv4- oder IPv6-Adresse dar, wirdValueErrorausgelöst.
Ein Nachteil dieser bequemen Funktionen ist, dass sie beide Formate behandeln müssen und ihre Fehlermeldungen deshalb nur wenig über den genauen Fehler verraten – sie wissen ja nicht, ob IPv4 oder IPv6 gemeint war. Genauere Fehlermeldungen bekommst du, indem du die Konstruktoren der jeweiligen versionsspezifischen Klasse direkt aufrufst.
IP-Adressen¶
Adressobjekte¶
Die Objekte IPv4Address und IPv6Address haben viele Attribute gemeinsam. Einige Attribute, die nur bei IPv6-Adressen sinnvoll sind, setzen auch IPv4Address-Objekte um, damit sich Code leichter schreiben lässt, der beide IP-Versionen richtig behandelt. Adressobjekte sind hashbar und lassen sich deshalb als Schlüssel in Dictionarys verwenden.
- class ipaddress.IPv4Address(address)¶
Erzeugt eine IPv4-Adresse. Ist address keine gültige IPv4-Adresse, wird
AddressValueErrorausgelöst.Als gültige IPv4-Adresse gilt Folgendes:
Eine Zeichenkette in Dezimalpunktschreibweise aus vier Dezimalzahlen im Bereich 0–255 einschließlich, durch Punkte getrennt (z. B.
192.168.0.1). Jede Zahl steht für ein Oktett (Byte) der Adresse. Führende Nullen sind nicht erlaubt, um Verwechslungen mit der Oktalschreibweise zu vermeiden.Eine ganze Zahl, die in 32 Bit passt.
Eine ganze Zahl, gepackt in ein
bytes-Objekt der Länge 4, höchstwertiges Oktett zuerst.
>>> ipaddress.IPv4Address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(3232235521) IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01') IPv4Address('192.168.0.1')
Geändert in Version 3.8: Führende Nullen sind erlaubt, selbst in zweideutigen Fällen, die wie Oktalschreibweise aussehen.
Geändert in Version 3.9.5: Führende Nullen sind nicht mehr erlaubt und gelten als Fehler. Zeichenketten mit IPv4-Adressen werden jetzt so streng geparst wie von
inet_pton()in der glibc.- version¶
Die passende Versionsnummer:
4für IPv4,6für IPv6.Geändert in Version 3.14: Auf der Klasse verfügbar gemacht.
- max_prefixlen¶
Die Gesamtzahl der Bits in der Adressdarstellung dieser Version:
32für IPv4,128für IPv6.Das Präfix legt fest, wie viele führende Bits einer Adresse verglichen werden, um zu bestimmen, ob eine Adresse zu einem Netzwerk gehört.
Geändert in Version 3.14: Auf der Klasse verfügbar gemacht.
- compressed¶
- exploded¶
Die Zeichenkettendarstellung in Dezimalpunktschreibweise. Führende Nullen erscheinen darin niemals.
Da IPv4 keine Kurzschreibweise für Adressen mit auf Null gesetzten Oktetten kennt, entsprechen diese beiden Attribute bei IPv4-Adressen immer
str(addr). Dass sie dennoch vorhanden sind, erleichtert es, Anzeigecode zu schreiben, der mit IPv4- und IPv6-Adressen umgehen kann.
- packed¶
Die Binärdarstellung dieser Adresse – ein
bytes-Objekt passender Länge, höchstwertiges Oktett zuerst. Das sind 4 Bytes bei IPv4 und 16 Bytes bei IPv6.
- reverse_pointer¶
Der Name des Reverse-DNS-PTR-Eintrags für die IP-Adresse, zum Beispiel:
>>> ipaddress.ip_address("127.0.0.1").reverse_pointer '1.0.0.127.in-addr.arpa' >>> ipaddress.ip_address("2001:db8::1").reverse_pointer '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
Das ist der Name, mit dem sich eine PTR-Abfrage durchführen ließe, nicht der aufgelöste Hostname selbst.
Added in version 3.5.
- is_multicast¶
True, wenn die Adresse für Multicast reserviert ist. Siehe RFC 3171 (für IPv4) oder RFC 2373 (für IPv6).
- is_private¶
True, wenn die Adresse laut iana-ipv4-special-registry (für IPv4) oder iana-ipv6-special-registry (für IPv6) als nicht global erreichbar festgelegt ist, mit den folgenden Ausnahmen:is_privateistFalsefür den gemeinsam genutzten Adressraum (100.64.0.0/10)Bei IPv6-Adressen mit abgebildeter IPv4-Adresse ergibt sich der Wert von
is_privateaus der Bedeutung der zugrunde liegenden IPv4-Adresse, und es gilt die folgende Bedingung (sieheIPv6Address.ipv4_mapped):address.is_private == address.ipv4_mapped.is_private
is_privatehat den entgegengesetzten Wert zuis_global, außer beim gemeinsam genutzten Adressraum (Bereich100.64.0.0/10), wo beideFalsesind.Geändert in Version 3.13: Einige falsch positive und falsch negative Ergebnisse behoben.
192.0.0.0/24gilt als privat, mit Ausnahme von192.0.0.9/32und192.0.0.10/32(vorher galt nur der Teilbereich192.0.0.0/29als privat).64:ff9b:1::/48gilt als privat.2002::/16gilt als privat.Innerhalb von
2001::/23, das ansonsten als privat gilt, gibt es Ausnahmen:2001:1::1/128,2001:1::2/128,2001:3::/32,2001:4:112::/48,2001:20::/28,2001:30::/28. Diese Ausnahmen gelten nicht als privat.
- is_global¶
True, wenn die Adresse laut iana-ipv4-special-registry (für IPv4) oder iana-ipv6-special-registry (für IPv6) als global erreichbar festgelegt ist, mit der folgenden Ausnahme:Bei IPv6-Adressen mit abgebildeter IPv4-Adresse ergibt sich der Wert von
is_privateaus der Bedeutung der zugrunde liegenden IPv4-Adresse, und es gilt die folgende Bedingung (sieheIPv6Address.ipv4_mapped):address.is_global == address.ipv4_mapped.is_global
is_globalhat den entgegengesetzten Wert zuis_private, außer beim gemeinsam genutzten Adressraum (Bereich100.64.0.0/10), wo beideFalsesind.Added in version 3.4.
Geändert in Version 3.13: Einige falsch positive und falsch negative Ergebnisse behoben, Einzelheiten unter
is_private.
- is_unspecified¶
True, wenn die Adresse nicht festgelegt ist. Siehe RFC 5735 (für IPv4) oder RFC 2373 (für IPv6).
- is_reserved¶
True, wenn die Adresse von der IETF als reserviert vermerkt ist. Bei IPv4 ist das nur240.0.0.0/4, der AdressblockReserved. Bei IPv6 sind es alle Adressen, die alsReserved by IETFfür die künftige Verwendung zugewiesen sind.Bemerkung
Bei IPv4 hat
is_reservednichts mit dem Adressblockwert der SpalteReserved-by-Protocolin iana-ipv4-special-registry zu tun.Vorsicht
Bei IPv6 ist
fec0::/10, ein früheres Adresspräfix mit dem Gültigkeitsbereich Site-Local, derzeit von dieser Liste ausgenommen (sieheis_site_localund RFC 3879).
- is_loopback¶
True, wenn dies eine Loopback-Adresse ist. Siehe RFC 3330 (für IPv4) oder RFC 2373 (für IPv6).
- is_link_local¶
True, wenn die Adresse für die link-lokale Verwendung reserviert ist. Siehe RFC 3927.
- ipv6_mapped¶
IPv6Address-Objekt, das die IPv6-Adresse mit abgebildeter IPv4-Adresse darstellt. Siehe RFC 4291.Added in version 3.13.
- IPv4Address.__format__(fmt)¶
Gibt eine Zeichenkettendarstellung der IP-Adresse zurück, gesteuert über eine ausdrückliche Formatangabe. fmt kann eines der Folgenden sein:
's', die Voreinstellung, entsprichtstr();'b'für eine mit Nullen aufgefüllte Binärzeichenkette;'X'oder'x'für eine hexadezimale Darstellung in Groß- oder Kleinbuchstaben; oder'n', was bei IPv4-Adressen'b'und bei IPv6'x'entspricht. Für die binäre und die hexadezimale Darstellung stehen der Formatbezeichner'#'und die Gruppierungsoption'_'zur Verfügung.__format__wird vonformat,str.formatund f-Strings verwendet.>>> format(ipaddress.IPv4Address('192.168.0.1')) '192.168.0.1' >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1')) '0b11000000101010000000000000000001' >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}' '2001:db8::1000' >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X') '2001_0DB8_0000_0000_0000_0000_0000_1000' >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000')) '0x2001_0db8_0000_0000_0000_0000_0000_1000'
Added in version 3.9.
- class ipaddress.IPv6Address(address)¶
Erzeugt eine IPv6-Adresse. Ist address keine gültige IPv6-Adresse, wird
AddressValueErrorausgelöst.Als gültige IPv6-Adresse gilt Folgendes:
Eine Zeichenkette aus acht Gruppen von je vier Hexadezimalziffern, wobei jede Gruppe 16 Bit darstellt. Die Gruppen sind durch Doppelpunkte getrennt. Das ist die ausgeschriebene Langschreibweise. Die Zeichenkette lässt sich auf verschiedene Weise auch verkürzt schreiben. Einzelheiten dazu in RFC 4291. So lässt sich zum Beispiel
"0000:0000:0000:0000:0000:0abc:0007:0def"zu"::abc:7:def"verkürzen.Wahlweise kann die Zeichenkette zusätzlich eine Scope-Zone-ID tragen, angehängt als
%scope_id. Ist sie vorhanden, darf sie nicht leer sein und kein%enthalten. Einzelheiten dazu in RFC 4007. So könntefe80::1234%1zum Beispiel die Adressefe80::1234auf der ersten Verbindung des Knotens bezeichnen.Eine ganze Zahl, die in 128 Bit passt.
Eine ganze Zahl, gepackt in ein
bytes-Objekt der Länge 16, Big-Endian.
>>> ipaddress.IPv6Address('2001:db8::1000') IPv6Address('2001:db8::1000') >>> ipaddress.IPv6Address('ff02::5678%1') IPv6Address('ff02::5678%1')
- compressed¶
Die Kurzform der Adressdarstellung: führende Nullen in den Gruppen weggelassen und die längste Folge von Gruppen, die nur aus Nullen bestehen, zu einer einzigen leeren Gruppe zusammengezogen.
Das ist auch der Wert, den
str(addr)bei IPv6-Adressen zurückgibt.- exploded¶
Die Langform der Adressdarstellung, mit allen führenden Nullen und allen Gruppen, die nur aus Nullen bestehen.
Zu den folgenden Attributen und Methoden siehe die entsprechende Dokumentation der Klasse
IPv4Address:- packed¶
- reverse_pointer¶
- version¶
- max_prefixlen¶
- is_multicast¶
- is_private¶
- is_global¶
Added in version 3.4.
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
- is_site_local¶
True, wenn die Adresse für die Verwendung innerhalb eines Standorts (site-local) reserviert ist. Beachte, dass RFC 3879 diesen Adressraum für veraltet erklärt hat. Verwendeis_private, um zu prüfen, ob diese Adresse im Raum der eindeutigen lokalen Adressen nach RFC 4193 liegt.
- ipv4_mapped¶
Bei Adressen, die wie abgebildete IPv4-Adressen im Bereich
::FFFF:0:0/96nach RFC 4291 aussehen, nennt diese Eigenschaft die eingebettete IPv4-Adresse. Bei jeder anderen Adresse ist sieNone.
- scope_id¶
Bei Adressen mit Gültigkeitsbereich nach RFC 4007 nennt diese Eigenschaft als Zeichenkette die Zone des Gültigkeitsbereichs, zu der die Adresse gehört. Ist keine Scope-Zone angegeben, ist sie
None.
- IPv6Address.__format__(fmt)¶
Siehe die entsprechende Methodenbeschreibung in
IPv4Address.Added in version 3.9.
Umwandlung in Zeichenketten und ganze Zahlen¶
Um mit Netzwerkschnittstellen wie dem Modul socket zusammenzuarbeiten, müssen Adressen in Zeichenketten oder ganze Zahlen umgewandelt werden. Das übernehmen die integrierten Funktionen str() und int():
>>> str(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> int(ipaddress.IPv4Address('192.168.0.1'))
3232235521
>>> str(ipaddress.IPv6Address('::1'))
'::1'
>>> int(ipaddress.IPv6Address('::1'))
1
Beachte, dass IPv6-Adressen mit Gültigkeitsbereich ohne Scope-Zone-ID in ganze Zahlen umgewandelt werden.
Operatoren¶
Adressobjekte unterstützen einige Operatoren. Sofern nichts anderes angegeben ist, lassen sich Operatoren nur zwischen zueinander passenden Objekten anwenden, also IPv4 mit IPv4 und IPv6 mit IPv6.
Vergleichsoperatoren¶
Adressobjekte lassen sich mit den üblichen Vergleichsoperatoren vergleichen. Gleiche IPv6-Adressen mit unterschiedlichen Scope-Zone-IDs sind nicht gleich. Ein paar Beispiele:
>>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
True
>>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
False
>>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
True
>>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
False
>>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
True
Arithmetische Operatoren¶
Zu Adressobjekten lassen sich ganze Zahlen addieren und von ihnen subtrahieren. Ein paar Beispiele:
>>> IPv4Address('127.0.0.2') + 3
IPv4Address('127.0.0.5')
>>> IPv4Address('127.0.0.2') - 3
IPv4Address('126.255.255.255')
>>> IPv4Address('255.255.255.255') + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address
Definitionen von IP-Netzwerken¶
Die Objekte IPv4Network und IPv6Network bieten einen Weg, Netzwerkdefinitionen festzulegen und zu untersuchen. Eine Netzwerkdefinition besteht aus einer Maske und einer Netzwerkadresse. Damit legt sie einen Bereich von IP-Adressen fest, die der Netzwerkadresse entsprechen, wenn man sie mit der Maske verknüpft (binäres UND). Eine Netzwerkdefinition mit der Maske 255.255.255.0 und der Netzwerkadresse 192.168.1.0 umfasst zum Beispiel die IP-Adressen im Bereich 192.168.1.0 bis 192.168.1.255 einschließlich.
Präfix, Netzmaske und Hostmaske¶
Netzmasken lassen sich auf mehrere gleichwertige Weisen angeben. Ein Präfix /<nbits> ist eine Schreibweise dafür, wie viele der höchstwertigen Bits in der Netzmaske gesetzt sind. Eine Netzmaske ist eine IP-Adresse, bei der eine Anzahl höchstwertiger Bits gesetzt ist. Das Präfix /24 entspricht damit der Netzmaske 255.255.255.0 bei IPv4 beziehungsweise ffff:ff00:: bei IPv6. Eine Hostmaske schließlich ist die logische Umkehrung einer Netzmaske und wird gelegentlich verwendet, um eine Netzmaske anzugeben, etwa in Zugriffslisten von Cisco. Die Hostmaske, die /24 bei IPv4 entspricht, ist 0.0.0.255.
Netzwerkobjekte¶
Netzwerkobjekte setzen alle Attribute der Adressobjekte um und darüber hinaus weitere. Diese haben IPv4Network und IPv6Network alle gemeinsam, deshalb sind sie nur bei IPv4Network beschrieben. Netzwerkobjekte sind hashbar und lassen sich deshalb als Schlüssel in Dictionarys verwenden.
- class ipaddress.IPv4Network(address, strict=True)¶
Erzeugt eine IPv4-Netzwerkdefinition. address kann eines der Folgenden sein:
Eine Zeichenkette aus einer IP-Adresse und einer optionalen Maske, getrennt durch einen Schrägstrich (
/). Die IP-Adresse ist die Netzwerkadresse. Die Maske ist entweder eine einzelne Zahl, dann ist sie ein Präfix, oder die Zeichenkettendarstellung einer IPv4-Adresse. Im zweiten Fall gilt sie als Netzmaske, wenn sie mit einem Feld ungleich Null beginnt, und als Hostmaske, wenn sie mit einem Nullfeld beginnt. Die einzige Ausnahme ist eine Maske aus lauter Nullen, die als Netzmaske behandelt wird. Fehlt die Maske, gilt/32.Die folgenden Angaben für address sind zum Beispiel gleichwertig:
192.168.1.0/24,192.168.1.0/255.255.255.0und192.168.1.0/0.0.0.255.Eine ganze Zahl, die in 32 Bit passt. Das entspricht einem Netzwerk mit einer einzigen Adresse, wobei address die Netzwerkadresse und
/32die Maske ist.Eine ganze Zahl, gepackt in ein
bytes-Objekt der Länge 4, Big-Endian. Sie wird ähnlich gedeutet wie ein address als ganze Zahl.Ein Zweiertupel aus einer Adressangabe und einer Netzmaske. Die Adressangabe ist entweder eine Zeichenkette, eine ganze Zahl mit 32 Bit, eine gepackte ganze Zahl mit 4 Bytes oder ein vorhandenes
IPv4Address-Objekt. Die Netzmaske ist entweder eine ganze Zahl, die die Präfixlänge angibt (z. B.24), oder eine Zeichenkette, die die Präfixmaske angibt (z. B.255.255.255.0).
AddressValueErrorwird ausgelöst, wenn address keine gültige IPv4-Adresse ist.NetmaskValueErrorwird ausgelöst, wenn die Maske für eine IPv4-Adresse ungültig ist.Ist strict
Trueund sind in der übergebenen Adresse Host-Bits gesetzt, wirdValueErrorausgelöst. Andernfalls werden die Host-Bits ausmaskiert, um die passende Netzwerkadresse zu bestimmen.Sofern nichts anderes angegeben ist, lösen alle Netzwerkmethoden, die andere Netzwerk- oder Adressobjekte annehmen,
TypeErroraus, wenn die IP-Version des Arguments nicht zuselfpasst.Geändert in Version 3.5: Die Zweiertupel-Form für den Konstruktorparameter address wurde hinzugefügt.
- version¶
- max_prefixlen¶
Siehe die entsprechende Attributbeschreibung in
IPv4Address.
- is_multicast¶
- is_private¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
Diese Attribute sind für das Netzwerk als Ganzes wahr, wenn sie sowohl für die Netzwerkadresse als auch für die Broadcast-Adresse wahr sind.
- network_address¶
Die Netzwerkadresse des Netzwerks. Netzwerkadresse und Präfixlänge zusammen bestimmen ein Netzwerk eindeutig.
- broadcast_address¶
Die Broadcast-Adresse des Netzwerks. Pakete an die Broadcast-Adresse sollten von jedem Host im Netzwerk empfangen werden.
- hostmask¶
Die Hostmaske als
IPv4Address-Objekt.
- netmask¶
Die Netzmaske als
IPv4Address-Objekt.
- with_prefixlen¶
- compressed¶
- exploded¶
Eine Zeichenkettendarstellung des Netzwerks, mit der Maske in Präfixschreibweise.
with_prefixlenundcompressedentsprechen immerstr(network).explodedverwendet die ausgeschriebene Form der Netzwerkadresse.
- with_netmask¶
Eine Zeichenkettendarstellung des Netzwerks, mit der Maske in Netzmaskenschreibweise.
- with_hostmask¶
Eine Zeichenkettendarstellung des Netzwerks, mit der Maske in Hostmaskenschreibweise.
- num_addresses¶
Die Gesamtzahl der Adressen im Netzwerk.
- prefixlen¶
Länge des Netzwerkpräfixes in Bit.
- hosts()¶
Gibt einen Iterator über die nutzbaren Hosts des Netzwerks zurück. Nutzbar sind alle IP-Adressen des Netzwerks außer der Netzwerkadresse selbst und der Broadcast-Adresse. Bei Netzwerken mit einer Maskenlänge von 31 sind Netzwerkadresse und Broadcast-Adresse im Ergebnis enthalten. Netzwerke mit der Maske 32 geben eine Liste mit der einen Hostadresse zurück.
>>> list(ip_network('192.0.2.0/29').hosts()) [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'), IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'), IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')] >>> list(ip_network('192.0.2.0/31').hosts()) [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')] >>> list(ip_network('192.0.2.1/32').hosts()) [IPv4Address('192.0.2.1')]
- overlaps(other)¶
True, wenn dieses Netzwerk teilweise oder vollständig in other liegt oder other vollständig in diesem Netzwerk liegt.
- address_exclude(network)¶
Berechnet die Netzwerkdefinitionen, die entstehen, wenn man das angegebene network aus diesem entfernt. Gibt einen Iterator über Netzwerkobjekte zurück. Löst
ValueErroraus, wenn network nicht vollständig in diesem Netzwerk liegt.>>> n1 = ip_network('192.0.2.0/28') >>> n2 = ip_network('192.0.2.1/32') >>> list(n1.address_exclude(n2)) [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
- subnets(prefixlen_diff=1, new_prefix=None)¶
Die Subnetze, die zusammen die aktuelle Netzwerkdefinition ergeben, je nach den übergebenen Werten. prefixlen_diff ist der Betrag, um den unsere Präfixlänge erhöht werden soll. new_prefix ist das gewünschte neue Präfix der Subnetze und muss größer sein als unser Präfix. Genau eines von prefixlen_diff und new_prefix muss gesetzt sein. Gibt einen Iterator über Netzwerkobjekte zurück.
>>> list(ip_network('192.0.2.0/24').subnets()) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')] >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23)) Traceback (most recent call last): File "<stdin>", line 1, in <module> raise ValueError('new prefix must be longer') ValueError: new prefix must be longer >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25)) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
- supernet(prefixlen_diff=1, new_prefix=None)¶
Das Supernetz, das diese Netzwerkdefinition enthält, je nach den übergebenen Werten. prefixlen_diff ist der Betrag, um den unsere Präfixlänge verringert werden soll. new_prefix ist das gewünschte neue Präfix des Supernetzes und muss kleiner sein als unser Präfix. Genau eines von prefixlen_diff und new_prefix muss gesetzt sein. Gibt ein einzelnes Netzwerkobjekt zurück.
>>> ip_network('192.0.2.0/24').supernet() IPv4Network('192.0.2.0/23') >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2) IPv4Network('192.0.0.0/22') >>> ip_network('192.0.2.0/24').supernet(new_prefix=20) IPv4Network('192.0.0.0/20')
- subnet_of(other)¶
Gibt
Truezurück, wenn dieses Netzwerk ein Subnetz von other ist.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> b.subnet_of(a) True
Added in version 3.7.
- supernet_of(other)¶
Gibt
Truezurück, wenn dieses Netzwerk ein Supernetz von other ist.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> a.supernet_of(b) True
Added in version 3.7.
- compare_networks(other)¶
Vergleicht dieses Netzwerk mit other. Dabei zählen nur die Netzwerkadressen, die Host-Bits nicht. Gibt
-1,0oder1zurück.>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32')) -1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32')) 1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32')) 0
Veraltet ab Version 3.7: Es verwendet dieselbe Sortier- und Vergleichslogik wie „<“, „==“ und „>“
- class ipaddress.IPv6Network(address, strict=True)¶
Erzeugt eine IPv6-Netzwerkdefinition. address kann eines der Folgenden sein:
Eine Zeichenkette aus einer IP-Adresse und einer optionalen Präfixlänge, getrennt durch einen Schrägstrich (
/). Die IP-Adresse ist die Netzwerkadresse, und die Präfixlänge muss eine einzelne Zahl sein, das Präfix. Fehlt die Präfixlänge, gilt/128.Beachte, dass ausgeschriebene Netzmasken derzeit nicht unterstützt werden.
2001:db00::0/24ist also ein gültiges Argument,2001:db00::0/ffff:ff00::dagegen nicht.Eine ganze Zahl, die in 128 Bit passt. Das entspricht einem Netzwerk mit einer einzigen Adresse, wobei address die Netzwerkadresse und
/128die Maske ist.Eine ganze Zahl, gepackt in ein
bytes-Objekt der Länge 16, Big-Endian. Sie wird ähnlich gedeutet wie ein address als ganze Zahl.Ein Zweiertupel aus einer Adressangabe und einer Netzmaske. Die Adressangabe ist entweder eine Zeichenkette, eine ganze Zahl mit 128 Bit, eine gepackte ganze Zahl mit 16 Bytes oder ein vorhandenes
IPv6Address-Objekt. Die Netzmaske ist eine ganze Zahl, die die Präfixlänge angibt.
AddressValueErrorwird ausgelöst, wenn address keine gültige IPv6-Adresse ist.NetmaskValueErrorwird ausgelöst, wenn die Maske für eine IPv6-Adresse ungültig ist.Ist strict
Trueund sind in der übergebenen Adresse Host-Bits gesetzt, wirdValueErrorausgelöst. Andernfalls werden die Host-Bits ausmaskiert, um die passende Netzwerkadresse zu bestimmen.Geändert in Version 3.5: Die Zweiertupel-Form für den Konstruktorparameter address wurde hinzugefügt.
- version¶
- max_prefixlen¶
- is_multicast¶
- is_private¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
- network_address¶
- broadcast_address¶
- hostmask¶
- netmask¶
- with_prefixlen¶
- compressed¶
- exploded¶
- with_netmask¶
- with_hostmask¶
- num_addresses¶
- prefixlen¶
- hosts()¶
Gibt einen Iterator über die nutzbaren Hosts des Netzwerks zurück. Nutzbar sind alle IP-Adressen des Netzwerks außer der Subnet-Router-Anycast-Adresse. Bei Netzwerken mit einer Maskenlänge von 127 ist die Subnet-Router-Anycast-Adresse im Ergebnis enthalten. Netzwerke mit der Maske 128 geben eine Liste mit der einen Hostadresse zurück.
- overlaps(other)¶
- address_exclude(network)¶
- subnets(prefixlen_diff=1, new_prefix=None)¶
- supernet(prefixlen_diff=1, new_prefix=None)¶
- subnet_of(other)¶
- supernet_of(other)¶
- compare_networks(other)¶
Siehe die entsprechende Attributbeschreibung in
IPv4Network.
- is_site_local¶
Dieses Attribut ist für das Netzwerk als Ganzes wahr, wenn es sowohl für die Netzwerkadresse als auch für die Broadcast-Adresse wahr ist.
Operatoren¶
Netzwerkobjekte unterstützen einige Operatoren. Sofern nichts anderes angegeben ist, lassen sich Operatoren nur zwischen zueinander passenden Objekten anwenden, also IPv4 mit IPv4 und IPv6 mit IPv6.
Logische Operatoren¶
Netzwerkobjekte lassen sich mit den üblichen logischen Operatoren vergleichen. Sie sind zuerst nach Netzwerkadresse und dann nach Netzmaske geordnet.
Iteration¶
Über Netzwerkobjekte lässt sich iterieren, um alle Adressen des Netzwerks aufzulisten. Dabei werden alle Hosts zurückgegeben, auch die nicht nutzbaren – für die nutzbaren gibt es die Methode hosts(). Ein Beispiel:
>>> for addr in IPv4Network('192.0.2.0/28'):
... addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
IPv4Address('192.0.2.9')
IPv4Address('192.0.2.10')
IPv4Address('192.0.2.11')
IPv4Address('192.0.2.12')
IPv4Address('192.0.2.13')
IPv4Address('192.0.2.14')
IPv4Address('192.0.2.15')
Netzwerke als Container von Adressen¶
Netzwerkobjekte können als Container von Adressen auftreten. Ein paar Beispiele:
>>> IPv4Network('192.0.2.0/28')[0]
IPv4Address('192.0.2.0')
>>> IPv4Network('192.0.2.0/28')[15]
IPv4Address('192.0.2.15')
>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
True
>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
False
Schnittstellenobjekte¶
Schnittstellenobjekte sind hashbar und lassen sich deshalb als Schlüssel in Dictionarys verwenden.
- class ipaddress.IPv4Interface(address)¶
Erzeugt eine IPv4-Schnittstelle. address bedeutet dasselbe wie im Konstruktor von
IPv4Network, nur dass beliebige Hostadressen immer angenommen werden.IPv4Interfaceist eine Unterklasse vonIPv4Addressund erbt daher alle Attribute dieser Klasse. Zusätzlich stehen die folgenden Attribute zur Verfügung:- ip¶
Die Adresse (
IPv4Address) ohne Netzwerkangaben.>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.ip IPv4Address('192.0.2.5')
- network¶
Das Netzwerk (
IPv4Network), zu dem diese Schnittstelle gehört.>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.network IPv4Network('192.0.2.0/24')
- with_prefixlen¶
Eine Zeichenkettendarstellung der Schnittstelle mit der Maske in Präfixschreibweise.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_prefixlen '192.0.2.5/24'
- with_netmask¶
Eine Zeichenkettendarstellung der Schnittstelle mit dem Netzwerk als Netzmaske.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_netmask '192.0.2.5/255.255.255.0'
- with_hostmask¶
Eine Zeichenkettendarstellung der Schnittstelle mit dem Netzwerk als Hostmaske.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_hostmask '192.0.2.5/0.0.0.255'
- class ipaddress.IPv6Interface(address)¶
Erzeugt eine IPv6-Schnittstelle. address bedeutet dasselbe wie im Konstruktor von
IPv6Network, nur dass beliebige Hostadressen immer angenommen werden.IPv6Interfaceist eine Unterklasse vonIPv6Addressund erbt daher alle Attribute dieser Klasse. Zusätzlich stehen die folgenden Attribute zur Verfügung:- ip¶
- network¶
- with_prefixlen¶
- with_netmask¶
- with_hostmask¶
Siehe die entsprechende Attributbeschreibung in
IPv4Interface.
Operatoren¶
Schnittstellenobjekte unterstützen einige Operatoren. Sofern nichts anderes angegeben ist, lassen sich Operatoren nur zwischen zueinander passenden Objekten anwenden, also IPv4 mit IPv4 und IPv6 mit IPv6.
Logische Operatoren¶
Schnittstellenobjekte lassen sich mit den üblichen logischen Operatoren vergleichen.
Beim Gleichheitsvergleich (== und !=) müssen IP-Adresse und Netzwerk übereinstimmen, damit die Objekte gleich sind. Eine Schnittstelle ist niemals gleich einem Adress- oder Netzwerkobjekt.
Beim Sortieren (<, > und so weiter) gelten andere Regeln. Schnittstellen- und Adressobjekte derselben IP-Version lassen sich vergleichen, wobei die Adressobjekte immer vor den Schnittstellenobjekten einsortiert werden. Zwei Schnittstellenobjekte werden zuerst nach ihren Netzwerken verglichen und, wenn diese gleich sind, nach ihren IP-Adressen.
Weitere Funktionen auf Modulebene¶
Das Modul bietet außerdem die folgenden Funktionen auf Modulebene:
- ipaddress.v4_int_to_packed(address)¶
Stellt eine Adresse als 4 gepackte Bytes in Netzwerkreihenfolge (Big-Endian) dar. address ist eine IPv4-Adresse als ganze Zahl.
ValueErrorwird ausgelöst, wenn die Zahl negativ oder für eine IPv4-Adresse zu groß ist.>>> ipaddress.ip_address(3221225985) IPv4Address('192.0.2.1') >>> ipaddress.v4_int_to_packed(3221225985) b'\xc0\x00\x02\x01'
- ipaddress.v6_int_to_packed(address)¶
Stellt eine Adresse als 16 gepackte Bytes in Netzwerkreihenfolge (Big-Endian) dar. address ist eine IPv6-Adresse als ganze Zahl.
ValueErrorwird ausgelöst, wenn die Zahl negativ oder für eine IPv6-Adresse zu groß ist.
- ipaddress.summarize_address_range(first, last)¶
Gibt einen Iterator über den zusammengefassten Netzwerkbereich zwischen der ersten und der letzten IP-Adresse zurück. first ist die erste
IPv4AddressoderIPv6Addressdes Bereichs, last die letzteIPv4AddressoderIPv6Addressdes Bereichs.TypeErrorwird ausgelöst, wenn first oder last keine IP-Adressen sind oder nicht dieselbe Version haben.ValueErrorwird ausgelöst, wenn last nicht größer ist als first oder wenn die Adressversion von first nicht 4 oder 6 ist.>>> [ipaddr for ipaddr in ipaddress.summarize_address_range( ... ipaddress.IPv4Address('192.0.2.0'), ... ipaddress.IPv4Address('192.0.2.130'))] [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]
- ipaddress.collapse_addresses(addresses)¶
Gibt einen Iterator über die zusammengefassten
IPv4Network- oderIPv6Network-Objekte zurück. addresses ist ein Iterable ausIPv4Network- oderIPv6Network-Objekten.TypeErrorwird ausgelöst, wenn addresses Objekte verschiedener Versionen enthält.>>> [ipaddr for ipaddr in ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'), ... ipaddress.IPv4Network('192.0.2.128/25')])] [IPv4Network('192.0.2.0/24')]
- ipaddress.get_mixed_type_key(obj)¶
Gibt einen Schlüssel zurück, mit dem sich Netzwerke und Adressen gemeinsam sortieren lassen. Adress- und Netzwerkobjekte sind voreingestellt nicht sortierbar, denn sie sind grundlegend verschieden. Der Ausdruck:
IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')
ist also sinnlos. Es gibt aber Fälle, in denen
ipaddresssie trotzdem sortieren soll. Dann kannst du diese Funktion als Argument key ansorted()übergeben.obj ist entweder ein Netzwerk- oder ein Adressobjekt.
Eigene Ausnahmen¶
Damit die Konstruktoren der Klassen genauer über Fehler berichten können, definiert das Modul die folgenden Ausnahmen:
- exception ipaddress.AddressValueError(ValueError)¶
Jeder Wertefehler, der die Adresse betrifft.
- exception ipaddress.NetmaskValueError(ValueError)¶
Jeder Wertefehler, der die Netzmaske betrifft.