IPv6-Adresse: Host-Teil mit Python ersetzen
English
Deutsch
In unserem vorherigen Beitrag Bitweise Operationen mit IPv6-Adressen und Netzwerken in Python haben wir gezeigt, wie man bitweise Operationen in Python mit dem ipaddress-Modul durchführt. In diesem Beitrag werden wir diese vorherige Arbeit nutzen, um nur den Host-Teil einer IPv6-Adresse zu ersetzen und den Netzwerk-Teil unverändert zu lassen – mit anderen Worten, wir werden zwei IPv6-Adressen miteinander kombinieren unter Verwendung einer konfigurierbaren Netzwerk-Präfixlänge.
replace_ipv6_host_part.py
import ipaddress
def bitwise_and_ipv6(addr1, addr2):
result_int = int.from_bytes(addr1.packed, byteorder="big") & int.from_bytes(addr2.packed, byteorder="big")
return ipaddress.IPv6Address(result_int.to_bytes(16, byteorder="big"))
def bitwise_or_ipv6(addr1, addr2):
result_int = int.from_bytes(addr1.packed, byteorder="big") | int.from_bytes(addr2.packed, byteorder="big")
return ipaddress.IPv6Address(result_int.to_bytes(16, byteorder="big"))
def bitwise_xor_ipv6(addr1, addr2):
result_int = int.from_bytes(addr1.packed, byteorder="big") ^ int.from_bytes(addr2.packed, byteorder="big")
return ipaddress.IPv6Address(result_int.to_bytes(16, byteorder="big"))
def replace_ipv6_host_part(net_addr, host_addr, netmask_length=64):
# Bitmasken berechnen
prefix_network = ipaddress.IPv6Network(f"::/{netmask_length}")
hostmask = prefix_network.hostmask # ffff:ffff:ffff:ffff:: für /64
netmask = prefix_network.netmask # ::ffff:ffff:ffff:ffff für /64
# Adresse berechnen
net_part = bitwise_and_ipv6(net_addr, netmask)
host_part = bitwise_and_ipv6(host_addr, hostmask)
# Resultierende IP zusammensetzen
return bitwise_or_ipv6(net_part, host_part)
# Verwendungsbeispiel:
# IP-Adresse, aus der der Netzwerk-Teil ("Präfix") genommen wird
net_addr = ipaddress.IPv6Address("2a01:c22:6f71:9f00:8ce6:2eff:fe60:cc69")
# IP-Adresse, aus der der Host-Teil (Suffix) genommen wird
host_addr = ipaddress.IPv6Address("::dead:babe:cafe:0000")
print(replace_ipv6_host_part(net_addr, host_addr))Dies gibt aus
replace_ipv6_output.txt
IPv6Address('2a01:c22:6f71:9f00:dead:babe:cafe:0')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