我无法将ipv6地址格式化为压缩二进制字符串。在进行一些挖掘后,似乎socket.inet_pton(...)
在Windows中不起作用。在挖掘时,我遇到了使用ctypes和Ws2_32.dll
中内置的InetPton函数的建议。下面是我的简单脚本:
import ctypes
import socket
a = ctypes.WinDLL("ws2_32.dll")
in_addr_p = ctypes.create_string_buffer("200f::")
out_addr_p = ctypes.create_string_buffer(40)
a.inet_pton(socket.AF_INET6, in_addr_p, out_addr_p)
print "Input: {}".format(repr(in_addr_p.raw))
print "Output: {}".format(repr(out_addr_p.raw))
当我运行它时,我得到以下内容:
Input: '200f::\x00'
Output: ' \x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
00\x00
我很难过为什么看起来“F”是唯一通过转换过程的角色。 “