【问题标题】:Convert a string (without separators) into IPV6 address representation将字符串(不带分隔符)转换为 IPV6 地址表示
【发布时间】:2019-11-28 06:37:47
【问题描述】:

我正在尝试通过阅读/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 模块,但我认为它不支持没有冒号。)

【问题讨论】:

    标签: python ip-address ipv6


    【解决方案1】:

    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
    

    【讨论】:

    • 感谢您的快速回复。 ipv6_addr.explode 将给出长格式。无需使用IPv6Address
    猜你喜欢
    • 2013-03-09
    • 2018-05-01
    • 2021-11-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多