2012-05-11 15 views
5

Sto usando inet_aton per convertire IPv4 IP (216.12.207.142) per una stringa 3624718222. io uso il seguente codice per questo:funzione inet_aton simile per IPv6

ip_dec = unpack('>L', inet_aton(ip))[0] 

Ora ho bisogno di convertire IPv6 IP 2001: 23: 207: 142 a una stringa simile. Mi dà errore in quanto non è l'indirizzo IPv4. Come posso fare questo?

risposta

6

Questo è il codice che ho utilizzato per lo scopo precedente. Si noti che restituisce un intero a 128 bit invece che una stringa (un numero intero è più utile in generale)

from socket import inet_pton, AF_INET6 
from struct import unpack 

def ip6_to_integer(ip6): 
    ip6 = inet_pton(AF_INET6, ip6) 
    a, b = unpack(">QQ", ip6) 
    return (a << 64) | b 

E testarlo

>>> ip6_to_integer("2001:23::207:142") 
42540490934961530759802172199372521794L 

O come una stringa se si deve!

>>> str(ip6_to_integer("2001:23::207:142")) 
'42540490934961530759802172199372521794'