Я написал простой код, который использует ioctl SIOCGIFCONF для запроса всех сетевых интерфейсов в системе и, используя inet_ntop, возвращает текстовое представление найденного адреса. Странно то, что когда обнаруживается локальный для канала IPv6-адрес, версия кода OSX, по-видимому, встраивает область в адрес.
Вот строка из / sbin / ifconfig в OSX после автонастройки интерфейсов (:
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
и IP-адрес, возвращенный ioctl SIOCGIFCONF:
Адрес IPv6: fe80: 5 :: 217: f2ff: fe0b: 5273
Похоже, что значение для scope (5) было вставлено сразу после fe80.
Тот же код в Linux возвращает адрес ipv6 без каких-либо дополнительных данных.
У меня возникают два вопроса: 1) Законно ли писать такой адрес ipv6? 2) Задокументировано ли где-нибудь поведение OSX?
Ссылки пожалуйста!
inet_ntop
иinet_pton
не поддерживают зоны IPv6, вы должны использовать толькоgetnameinfo
иgetaddrinfo
. - person Steve-o   schedule 05.05.2011