2012-05-11 14 views
5

estoy usando inet_aton para convertir IPv4 IP (216.12.207.142) a una cadena 3624718222. Yo uso el siguiente código para que:función inet_aton similar para IPv6

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

Ahora necesito para convertir IP IPv6 2001: 23 :: 207: 142 a una cadena similar. Me da error ya que no es una dirección IPv4. ¿Cómo puedo hacer esto?

Respuesta

6

Este es el código que he usado para este fin. Observe que devuelve un entero de 128 bits en lugar de una cadena (un entero es más útil en general)

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 

y pruebas que

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

O como una cadena si es necesario!

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