Тест подключения IPv6 на C++

Есть ли какая-либо функция C++ для проверки того, поддерживает ли компьютер, на котором работает моя программа, подключение IPv6?

Мне нужно знать что-то вроде результата этой страницы http://test-ipv6.com/, но на С++ .

EDIT: я пытался использовать getifaddrs(). Но возвращаемое значение может быть AF_INET6 found, потому что у меня действительно установлен адрес IPv6, но подключение IPv6 не работает (вероятно, из-за интернет-провайдера). Итак, есть ли способ проверить, действительно ли работает подключение IPv6?


person matlos    schedule 18.11.2012    source источник
comment
Если ваша стандартная библиотека C имеет заголовок <netinet/in6.h>, ваша реализация поддерживает IPv6.   -  person    schedule 18.11.2012
comment
Можете ли вы попытаться установить TCP-поверх-IPv6-соединение с портом 80 (веб-сервер) на сайте test-ipv6.com и посмотреть, удастся ли попытка подключения? Если это так, необходимо настроить IPv6; если нет, то что-то не работает.   -  person Jeremy Friesner    schedule 18.11.2012
comment
Конфигурация локального компьютера не дает никаких гарантий того, что у вас действительно есть работающее сквозное соединение IPv6. Смысл test-ipv6.com в том, что он фактически проверяет разрешение DNS-записей и загрузку образцов файлов по IPv6. Это выходит далеко за рамки проверки того, поддерживает ли компьютер IPv6 в C++.   -  person Jeremy Visser    schedule 19.11.2012
comment
Ваш сетевой интерфейс может поддерживать IPv6, но если этот IPv6 выходит за пределы вашего модема/маршрутизатора, это совсем другая история. Вы не можете убедиться в этом, заглянув в настройки компьютера, они не дадут вам никакой полезной информации. К сожалению, вам придется полагаться на внешние источники, чтобы определить, подключаетесь ли вы к ним через IPv6 или нет в большинстве случаев, если только у вас нет интерфейса, подключающегося напрямую к Интернету, а не через маршрутизатор.   -  person Havenard    schedule 06.08.2016


Ответы (1)


Все современные операционные системы поддерживают IPv6, поэтому вам не нужно беспокоиться о доступности протокола. (Если это не так, ваша программа все равно не скомпилируется.)

Но единственный способ определить, действительно ли у компьютера есть рабочее соединение IPv6, — это попытаться установить соединение IPv6.

На самом деле это то, что Microsoft делает со своим индикатором состояния сети в Окна. Они пытаются загрузить URL с веб-сервера, поддерживающего только IPv6, и URL-адрес веб-сервера, поддерживающего только IPv4. Если оба из них не работают, вы получите желтый треугольник с восклицательным знаком над значком сети на панели задач.

Так как мне нужна была аналогичная функциональность, но мне также нужны были реальные IPv6-адреса, я создал свою общедоступную службу, которая включает в себя эту функциональность (и несколько других вещей). Итак, у меня есть URL-адрес только для IPv6, который возвращает общедоступный IPv6-адрес, и URL-адрес только для IPv4, который возвращает общедоступный адрес IPv4.

Поскольку один из URL-адресов только доступен по IPv6, а другой только доступен по IPv4, вы можете независимо проверять подключение для каждого протокола.

В любом случае, если ваша попытка получить URL-адрес не удалась, вы можете изучить возвращенную ошибку, чтобы определить, в чем может быть проблема.

person Michael Hampton    schedule 06.08.2016