Python 中的 IPv6 地址表示
IPv6 address representation in Python
我在将 IPv6 地址转换为文本表示时注意到一个我无法解释的行为:
In[38]: socket.inet_ntop(socket.AF_INET6, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x7f\x00\x00\x01')
Out[38]: '::ffff:127.0.0.1'
In[39]: socket.inet_ntop(socket.AF_INET6, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x7f\x00\x00\x00')
Out[39]: '::ff:ffff:7f00:0'
我很惊讶地看到 ::ffff:127.0.0.1
,我希望它是 ::ffff:7f00:0
。它是标准的还是至少是常见的?哪些 IPv6 地址以这种方式表示? Wikipedia article 根本没有提到它。我很困惑。
POSIX page for inet_ntop
将格式指定为选项之一(略有释义):
A third form that is sometimes more convenient when dealing with a mixed environment of IPv4 and IPv6 nodes is x:x:x:x:x:x:d.d.d.d
, where the x
characters are the hexadecimal values of the six high-order 16-bit pieces of the address, and the d
characters are the decimal values of the four low-order 8-bit pieces of the address (standard IPv4 representation).
我在将 IPv6 地址转换为文本表示时注意到一个我无法解释的行为:
In[38]: socket.inet_ntop(socket.AF_INET6, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x7f\x00\x00\x01')
Out[38]: '::ffff:127.0.0.1'
In[39]: socket.inet_ntop(socket.AF_INET6, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x7f\x00\x00\x00')
Out[39]: '::ff:ffff:7f00:0'
我很惊讶地看到 ::ffff:127.0.0.1
,我希望它是 ::ffff:7f00:0
。它是标准的还是至少是常见的?哪些 IPv6 地址以这种方式表示? Wikipedia article 根本没有提到它。我很困惑。
POSIX page for inet_ntop
将格式指定为选项之一(略有释义):
A third form that is sometimes more convenient when dealing with a mixed environment of IPv4 and IPv6 nodes is
x:x:x:x:x:x:d.d.d.d
, where thex
characters are the hexadecimal values of the six high-order 16-bit pieces of the address, and thed
characters are the decimal values of the four low-order 8-bit pieces of the address (standard IPv4 representation).