3

我在 iOS App Pythonista 3 上运行 python。当我尝试获取 IPv6 地址时,它最终返回字节而不是格式化地址。现在我正在尝试找到一种方法来正确获取地址而不使用字节,或者找到一种方法使字节成为地址。这是我为获取地址而运行的代码:

def getIPv6Addr(input):
    return socket.getaddrinfo(input, None, socket.AF_INET6)

这是输出:

[(30, 2, 17, '', (30, '\x00\x00\x00\x00\x00\x00&\x07\xf8\xb0@\x00\x08\x14')), (30, 1, 6, '', (30, '\x00\x00\x00\x00\x00\x00&\x07\xf8\xb0@\x00\x08\x14'))]

编辑:另一种解决方案是查找正在使用哪种类型的编码将此数据转换为字节。

What Makes:
2607:f8b0:4000:814::200e
become
\x00\x00\x00\x00\x00\x00&\x07\xf8\xb0@\x00\x08\x14
4

3 回答 3

1

您可以使用ipaddresspython 附带的模块。只需将字节传递给 的构造函数,ipaddress.IPv6Address您将获得一个表示地址的对象,并为您提供很多打印和操作它的可能性。

于 2017-06-05T08:51:54.870 回答
0

解决了!

我用十六进制对字节进行编码,使它成为地址!

>>> getIPv6Addr("google.com")[0][4][1].encode("hex")
'0000000000002607f8b040000811'
于 2017-06-21T15:25:13.810 回答
0

如果你使用这个包,有一个快速的方法:

from django.utils.encoding import smart_str

a = '\x00\x00\x00\x00\x00\x00&\x07\xf8\xb0@\x00\x08\x14'


print(smart_str(a))
于 2017-06-05T01:51:19.120 回答