2017-06-05 3 views
2

Ich benutze Python auf der iOS-App Pythonista 3. Wenn ich versuche, eine IPv6-Adresse zu bekommen, endet es Rückgabe von Bytes anstelle einer formatierten Adresse. Jetzt versuche ich einen Weg zu finden, entweder die Adresse richtig ohne Bytes zu erhalten, oder einen Weg zu finden, die Bytes zur Adresse zu machen. Hier ist der Code, den ich lief die Adresse zu erhalten:Python IPv6 Bytes an Adresse

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

und hier war die Ausgabe:

[(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'))] 

Edit: Die alternative Lösung zu finden, welche Art von Codierung verwendet wird, dies zu drehen Daten in Bytes.

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

Möglicherweise verwandt? https://stackoverflow.com/questions/1238934/getaddrinfo-in-iphone Das 2-Tupel, das Sie erhalten, sieht sicher nicht aus wie irgendetwas, das eine IPv6-Adresse angibt. – chepner

+0

Ich sehe keine ähnlichen Ergebnisse von socket.getaddrinfo in Python2 oder Python3 unter Linux. Das überrascht mich sehr. –

Antwort

0

gibt es eine schnelle Art und Weise, wenn Sie dieses Paket verwenden:

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

Beim Versuch, smart_str auszuführen, habe ich herausgefunden, dass pythonista + django nicht funktioniert, weil django Subprozesse aufruft und iOS die Unterverarbeitung blockiert. Danke für den Versuch! – RoNAPC

0

können Sie das ipaddress Modul verwenden, die mit Python enthalten ist. Übergeben Sie einfach die Bytes an den Konstruktor von ipaddress.IPv6Address und Sie erhalten ein Objekt, das die Adresse darstellt und Ihnen viele Möglichkeiten zum Drucken und Manipulieren gibt.

0

Gelöst!

Ich habe die Bytes mit Hex codiert und es gemacht es wird die Adresse!

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