我有一个IPv6地址,我想以人类可读的格式打印它。
在IPv4地址上我socket.inet_ntoa(...)
,但在IPv6上我得到了
socket.error: packed IP wrong length for inet_ntoa
答案 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)
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