如何在python中解码/打印IPV6地址

时间:2017-06-12 14:41:52

标签: python ip

我有一个IPv6地址,我想以人类可读的格式打印它。

在IPv4地址上我socket.inet_ntoa(...),但在IPv6上我得到了

socket.error: packed IP wrong length for inet_ntoa

2 个答案:

答案 0 :(得分:1)

使用inet_ntop(适用于IPv4和IPv6)而不是inet_ntoa(仅限IPv4)。

print(socket.inet_ntop(socket.AF_INET6, socket.inet_pton(socket.AF_INET6, '10::' )))

答案 1 :(得分:1)

来自documentation

  

socket.inet_ntoa(packed_ip)转换32位打包的IPv4地址(a   长度为四个字符的字符串)到其标准的点分四字符串   表示(例如,'123.45.67.89')。这很有用   与使用标准C库和需求的程序交谈   struct in_addr类型的对象,它是32位的C类型   打包的二进制数据,此函数作为参数。

     

如果传递给此函数的字符串不完全是4个字节   length,socket.error将被引发。 inet_ntoa()不支持   对于IPv4 / v6双栈,应使用IPv6和inet_ntop()代替   支持。

您可以使用库IPy来处理IPv4和IPv6。

>>> print(IP('1080:0:0:0:8:800:200C:417A'))
1080::8:800:200c:417a
相关问题