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



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

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

套接字错误:打包的 IP 长度错误,inet_ntoa

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

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

从文档中:

socket.inet_ntoa(packed_ip( 转换 32 位打包的 IPv4 地址 (a 长度为四个字符的字符串(到其标准点状四边形字符串 表示形式(例如,"123.45.67.89"(。这在以下情况下很有用 与使用标准 C 库的程序对话并需要 结构 in_addr 类型的对象,这是 32 位的 C 类型 此函数用作参数的打包二进制数据。

如果传递给此函数的字符串不正好是 4 个字节 长度,将引发套接字错误。inet_ntoa(( 不支持 IPv6 和 inet_ntop(( 应该用于 IPv4/v6 双堆栈 支持。

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

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

最新更新