我已经编写了一些简单的代码,使用ioctl SIOCGIFCONF查询系统上的所有网络接口,使用inet_ntop返回找到的地址的文本表示。奇怪的是,当发现一个链路本地IPv6地址时,OSX版本的代码似乎将范围嵌入到地址中。
以下是在OSX上自动配置接口后/sbin/ifconfig中的一行:
以下是在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
。 - Steve-o