Обновлено (3 августа 2016): После поиска и выключаться в течение последних нескольких месяцев по этому вопросу (потому что я на самом деле в этом нуждаются ответить себе). Я считаю, что нашел Windows-ориентированный ответ. Я тестировал это только на Windows 10, поэтому я не знаю о более старых версиях. Но этот API не должен измениться, если кто-то хочет, чтобы проверить это для меня :-)
Всех _IP_ADAPTER_UNICAST_ADDRESS структуры имеет перечисление для адресного префикса и суффикса. Я теперь потрудился посмотреть на них, и они - весь ключ к решению этой проблемы!
Что такое временный адрес IPv6 .... это адрес с RANDOM SUFFIX! Итак, для всех адресов IPv6 в IP_ADAPTER_UNICAST_ADDRESS посмотрите на IP_SUFFIX_ORIGIN, если это IpSuffixOriginRandom. Это оно.
Я действительно все еще шокирован тем, как мало в этой теме в Интернете, и это будет огромной проблемой в течение нескольких лет для разработчиков сетевых приложений, если никто не знает, как решить эту проблему для серверных приложений (даже те, работает на потребительских ПК)
Вы впервые услышали ответ!
(Оригинал ответа): Я смотрел на эту тему точной для кросс-платформенных приложений, а также. Я думаю, что нашел «способ» отфильтровать временные адреса IPv6 в Windows. В основном RFC 4941 претензий временные адреса должны:
- иметь действительный Lifetime меньше, чем адрес "Public"
- имеют преимущественное Lifetime меньше, чем адрес "Public"
Так что для C++, когда используя функцию GetAdaptersAddresses, вы можете посмотреть в структуре PIP_ADAPTER_ADDRESSES для структуры _IP_ADAPTER_UNICAST_ADDRESS и оценить члены ValidLifetime и PreferredLifetime. После фильтрации для типа адреса (если вам нужно знать Local-Link vs Public), вы можете сохранить текущую таблицу наибольшего времени жизни. Наибольший срок службы (за адаптер) должен быть общедоступным!
Чтобы увидеть информационное время жизни адреса быстро запустить команду Windows Terminal: Netsh интерфейс ipv6 показать адрес
Вы можете увидеть все временные адреса намного меньше, чем невыполненная SLAAC жизнь.
Я сейчас работаю с этим допущением, пока тестирование не докажет обратное. Все временные адреса основаны на публике и поэтому не могут жить в нем.
Надеюсь, что это поможет
Вы когда-нибудь находили ответ на этот вопрос, Хосе? Мне любопытно, я ... – theory
Нет, это было немного сложно и решило не реализовывать его. –
Bummer. У вас есть хотя бы код, показывающий, как использовать 'octl' на OS X, который делает трюк? – theory