9

我正在使用inet_aton将 IPv4 IP(216.12.207.142) 转换为字符串 3624718222。为此,我使用以下代码:

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

现在我需要将 IPv6 ip 2001:23::207:142 转换为类似的字符串。它给了我错误,因为它不是 IPv4 地址。我怎样才能做到这一点?

4

1 回答 1

10

这是我之前用于此目的的代码。请注意,它返回一个 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'
于 2012-05-11T22:52:15.307 回答