【发布时间】:2011-08-18 19:17:19
【问题描述】:
我编写了一些简单的代码,使用 ioctl SIOCGIFCONF 来查询系统上的所有网络接口,并使用 inet_ntop 返回找到的地址的文本表示。奇怪的是,当发现链接本地 IPv6 地址时,OSX 版本的代码似乎将范围嵌入到地址中。
在自动配置接口后,这是来自 OSX 上 /sbin/ifconfig 的一行(:
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
ether 00:17:f2:0b:52:73
inet6 fe80::217:f2ff:fe0b:5273%en1 prefixlen 64 scopeid 0x5
和 ioctl SIOCGIFCONF 返回的 IP 地址:
IPv6 地址:fe80:5::217:f2ff:fe0b:5273
看起来作用域 (5) 的值是在 fe80 之后立即插入的。
Linux 上的相同代码返回 ipv6 地址,没有任何额外数据。
我想到了两个问题: 1)这样写一个ipv6地址合法吗? 2) OSX 行为是否记录在任何地方?
请参考!
【问题讨论】:
-
在大多数平台上
inet_ntop和inet_pton不支持IPv6 区域,您只能使用getnameinfo和getaddrinfo。 -
谢谢,史蒂夫,不知道。我的问题仍然存在:IPv6 地址应该有区域信息吗? RFC4291 第 2.2 章中未提及。地址的文本表示
-
仅链接本地范围地址,即 fe80:: 前缀。