2017-06-05 109 views
2

我在iOS应用Pythonista 3上运行python。 当我尝试获取IPv6地址时,它返回的字节数是 而不是格式化的地址。 现在我试图找到一种方法来正确地获取没有字节的地址,或者找到一种方法使字节成为地址。 这里是我跑得到的地址代码: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\[email protected]\x00\x08\x14')), (30, 1, 6, '', (30, '\x00\x00\x00\x00\x00\x00&\x07\xf8\[email protected]\x00\x08\x14'))] 

编辑:另一种方法是找到正在使用什么类型的编码把这个数据转换为字节。

What Makes: 
2607:f8b0:4000:814::200e 
become 
\x00\x00\x00\x00\x00\x00&\x07\xf8\[email protected]\x00\x08\x14 
+0

可能是相关的? https://stackoverflow.com/questions/1238934/getaddrinfo-in-iphone你得到的2元组看起来不像任何指定IPv6地址的东西。 – chepner

+0

我在Linux上看不到类似的python2或python3中的socket.getaddrinfo结果。这让我感到很惊讶。 –

回答

0

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

from django.utils.encoding import smart_str 

a = '\x00\x00\x00\x00\x00\x00&\x07\xf8\[email protected]\x00\x08\x14' 


print(smart_str(a)) 
+0

在尝试运行smart_str时,我发现pythonista + django不起作用,因为django调用子进程和iOS块子处理。感谢您的尝试! – RoNAPC

0

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

0

解决!

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

>>> getIPv6Addr("google.com")[0][4][1].encode("hex") 
'0000000000002607f8b040000811'