аналогичная функция inet aton для IPv6

Я использую inet_aton для преобразования IPv4 IP (216.12.207.142) в строку 3624718222. Я использую следующий код:

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

теперь мне нужно преобразовать IPv6 IP 2001: 23:: 207: 142 в аналогичную строку. Это дает мне ошибку, поскольку это не IPv4-адрес. Как я могу это сделать?

1 ответов


это код, который я использовал для этой цели раньше. Обратите внимание, что он возвращает 128-битное целое число, а не строку (целое число более полезно в целом)

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

и тестирования

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

или как строка, если необходимо!

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