0

有没有人比较两个 ipv6 地址的好主意。看起来短缺规则使它变得复杂。

例如完整地址 1234:0db8:0000:0000:0000:ff00:ff00:0011

  1. 可以删除前导零 => 1234:0db8::::ff00:ff00:11
  2. 可以删除一组空字段 1234:0db8::ff00:ff00:00111
  3. 最后 32 位可以是老式的 ipv4 地址 1234:0db8::::ff00:172.0.0.15
4

2 回答 2

2

您可以使用标准库函数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函数在不同的平台和语言上可用:

于 2013-08-02T09:40:35.963 回答
0

你可以用冒号分割它,然后比较每个值。如果您遇到一个空字段 -> 为它插入“0000”。如果遇到少于 4 位的字段 -> 用零填充

此外,您可以为每个字段赋予权重以强调字段的值。

于 2013-08-02T09:31:34.720 回答