Python ipaddress.IPv6Network ValueError beheben: ... has host bits set
English
Deutsch
Problem:
Beim Versuch, eine IPv6-Netzwerkadresse in Python mit Code wie
ipv6_network_example.py
import ipaddress
ipaddress.IPv6Network("2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64")erscheint eine Fehlermeldung wie
ipv6_traceback.txt
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/tmp/ipykernel_154945/1312927855.py in <module>
1 import ipaddress
----> 2 ipaddress.IPv6Network("2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64")
/usr/lib/python3.8/ipaddress.py in __init__(self, address, strict)
2106 if packed & int(self.netmask) != packed:
2107 if strict:
-> 2108 raise ValueError('%s has host bits set' % self)
2109 else:
2110 self.network_address = IPv6Address(packed &
ValueError: 2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64 has host bits setLösung 1: Vielleicht sollte stattdessen IPv6Address statt IPv6Network verwendet werden
Wenn die Adresse geparst werden soll und das Netzwerk keine Rolle spielt, ipaddress.IPv6Address verwenden, aber beachten, dass die CIDR-Maske (z.B. /64) entfernt werden muss. Ob IPv6Address oder IPv6Network verwendet werden sollte, hängt davon ab, was damit gemacht werden soll – wenn auf einen spezifischen Host verwiesen werden soll, wird fast immer IPv6Address verwendet.
ipv6_address_example.py
import ipaddress
ipaddress.IPv6Address("2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69")Lösung 2: strict=False verwenden, damit IPv6Network die Host-Bits verwirft:
strict=False ignoriert diesen Fehler im Wesentlichen
ipv6_strict_example.py
import ipaddress
ipaddress.IPv6Network("2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64", strict=False)Beachten, dass das Ergebnis
ipv6_strict_result.py
IPv6Network('2a01:c23:c0bb:d00::/64')ist, sodass die Informationen in den Host-Bits verloren gehen!
Lösung 2: Host-Bits manuell entfernen
Da die Host-Bits ohnehin verworfen werden, kann das IPv6-Netzwerk einfach mit der korrekten Netzmaske angegeben werden:
ipv6_network_corrected.py
import ipaddress
ipaddress.IPv6Network("2a01:c23:c0bb:d00::/64")Check out similar posts by category:
Networking, Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow