将字符串(不带分隔符)转换为 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
我正在尝试通过读取 /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