python - inet_aton 类似 IPv6 的功能

标签 python ip type-conversion ipv6 inet

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

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

现在我需要将 IPv6 ip 2001:23::207:142 转换为类似的字符串。它给我错误,因为它不是 IPv4 地址。我该怎么做?

最佳答案

这是我之前用于此目的的代码。请注意,它返回的是 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'

关于python - inet_aton 类似 IPv6 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558441/

相关文章:

python - 在 Python 中将 IPv4 地址转换为十六进制 IPv6 地址

python - python 配置文件中的函数名称

python - 为什么 Automator 应用程序在作为 LaunchDaemon 运行时会出现权限错误?

python - 散点大小和位置的问题

apache - 带有反向链接的 cPanel 辅助 IP 的 SSL 错误

创建ip网络数据包

c++ - 将 double/int 转换为字符串的函数

python - Python 3.4 中的 `async for`

sockets - 如何从 Phoenix 框架中的套接字获取remote_ip?

c++ - 重构建议 : How to avoid type checking in this OO design