2017-06-05 127 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'