1.IPv6转整数
for 循环,每16位(也就是每个:分割的元素),进行一次 16 进制转 10 进制,并且将上一次的的结果扩大 2 的 16 次方,也就是左移 16 位,以此来满足权重
2.整数转IPv6
- 使用
struct.pack将整数转为打包的IP地址,因为只能处理 8 个字节,所以我们将 16 字节的 IPv6 分为两部分,前 64 位和后 64 位,然后再使用struct.pack, - 使用
socket.inet_ntop转换一个打包IP地址为标准字符串表达式
# IPv6转整数
def ipv6_to_int(ipv6):
groups = ipv6.split(':')
result = 0
for group in groups:
group_value = int(group, 16)
result = (result << 16) + group_value
return result
# 整数转IPv6
def ipv6_int_to_str(ip_int):
hi = (ip_int >> 64) & 0xFFFFFFFFFFFFFFFF;
lo = ip_int & 0xFFFFFFFFFFFFFFFF
ip_pack = struct.pack('!QQ', hi, lo)
return socket.inet_ntop(socket.AF_INET6, ip_pack)