有没有人比较两个 ipv6 地址的好主意。看起来短缺规则使它变得复杂。
例如完整地址 1234:0db8:0000:0000:0000:ff00:ff00:0011
- 可以删除前导零 => 1234:0db8::::ff00:ff00:11
- 可以删除一组空字段 1234:0db8::ff00:ff00:00111
- 最后 32 位可以是老式的 ipv4 地址 1234:0db8::::ff00:172.0.0.15
有没有人比较两个 ipv6 地址的好主意。看起来短缺规则使它变得复杂。
例如完整地址 1234:0db8:0000:0000:0000:ff00:ff00:0011
您可以使用标准库函数socket.inet_pton
将地址转换为字节字符串以进行比较:
>>> socket.inet_pton(socket.AF_INET6,'1234:0db8::ff00:ff00:0011')
'\x124\r\xb8\x00\x00\x00\x00\x00\x00\xff\x00\xff\x00\x00\x11'
>>> socket.inet_pton(socket.AF_INET6,'1234:0db8:0000:0000:0000:ff00:ff00:0011')
'\x124\r\xb8\x00\x00\x00\x00\x00\x00\xff\x00\xff\x00\x00\x11'
这将降低您创建自己的 IPv6 错误的风险。
上面的示例是在 python 中,但该inet_pton
函数在不同的平台和语言上可用:
你可以用冒号分割它,然后比较每个值。如果您遇到一个空字段 -> 为它插入“0000”。如果遇到少于 4 位的字段 -> 用零填充
此外,您可以为每个字段赋予权重以强调字段的值。