将字符串(不带分隔符)转换为 IPV6 地址表示形式

Convert a string (without separators) into IPV6 address representation

我正在尝试通过读取 /proc/net/if_inet6 来获取本地 IPV6 地址。但是那里的地址没有任何冒号,例如:000000000000000000000abc00070def.

所以我在多个地方添加冒号 (:),如下所示:

str6 = "000000000000000000000abc00070def"
i = 4
addr = str6[:i]
while i < len(str6):
    addr += ":" + str6[i:i+4]
    i += 4
print addr     # output: 0000:0000:0000:0000:0000:0abc:0007:0def

对于普通字符串,这工作正常。

但由于字符串是 IPV6 地址,所以想知道是否有更好的方法来做到这一点? (尝试使用 ipaddress 模块,但我认为它不支持没有冒号。)

ipaddress.IPv6Address 也可以从 "valid" 整数构造一个 IPv6 地址:

import ipaddress

ipv6_addr = ipaddress.ip_address(int('000000000000000000000abc00070def', 16))
print(ipv6_addr)

打印:

::abc:7:def

地址表示的长格式(分解):

print(ipv6_addr.exploded)

打印:

0000:0000:0000:0000:0000:0abc:0007:0def