是否有任何包或简单的方法将ipv6转换为整数?该算法对于理解ipv6短格式应该有点聪明.在我开始编写自己的代码之前,我只是想知道是否有人知道可以完成这项工作的软件包?
谢谢,
mha*_*wke 16
您可以在标准 Python套接字模块的帮助下完成此操作.socket.inet_pton()处理IPV6短格式没有任何问题.
import socket
from binascii import hexlify
def IPV6_to_int(ipv6_addr):
return int(hexlify(socket.inet_pton(socket.AF_INET6, ipv6_addr)), 16)
>>> IPV6_to_int('fe80:0000:0000:0000:021b:77ff:fbd6:7860')
338288524927261089654170743795120240736L
>>> IPV6_to_int('fe80::021b:77ff:fbd6:7860')
338288524927261089654170743795120240736L
Run Code Online (Sandbox Code Playgroud)
你想要IPy.
>>> IPy.IP('fe80::21b:77ff:fbd6:7860')
IP('fe80::21b:77ff:fbd6:7860')
>>> IPy.IP('fe80::21b:77ff:fbd6:7860').int()
338288524927261089654170743795120240736L
>>> IPy.IP('fe80::fbd6:7860')
IP('fe80::fbd6:7860')
>>> IPy.IP('fe80::fbd6:7860').int()
338288524927261089654018896845572831328L
Run Code Online (Sandbox Code Playgroud)
另一种只使用stdlib的解决方案:
import socket
import struct
def int_from_ipv6(addr):
hi, lo = struct.unpack('!QQ', socket.inet_pton(socket.AF_INET6, addr))
return (hi << 64) | lo
Run Code Online (Sandbox Code Playgroud)
>>> int_from_ipv6('fe80::fbd6:7860')
338288524927261089654018896845572831328L
Run Code Online (Sandbox Code Playgroud)
在Python 3.3+上你可以使用ipaddress模块:
>>> import ipaddress
>>> int(ipaddress.ip_address('fe80::fbd6:7860'))
338288524927261089654018896845572831328
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9489 次 |
| 最近记录: |