Вопрос

Я ищу функцию, которая принимает адрес IPv6 в качестве аргумента и возвращает имя домена.

Чтобы было понятно, 2a00:1450:8006::68 возвращает ipv6.google.com.

(Цель состоит в том, чтобы передать это доменное имя функции getaddrinfo.)

Спасибо :-)

редактировать1:я пробовал getaddrinfo("2a00:1450:8006::68", "http", NULL, &result); , он возвращает «семейство адресов для имени хоста не поддерживается» и getaddrinfo("ipv6.google.com", "http", NULL, &result); вернуть ошибку «Нет адреса, связанного с горячим именем».

РЕДАКТИРОВАТЬ2:Я согласен с вами, у меня проблемы с системой IPV6, я пробовал http://test-ipv6.com/ и похоже, что у меня нет адреса IPV6, но есть ifconfig он возвращает:

adr inet6: fe80::15b:fcff:fe65:d516/64 Scope:Lien
Это было полезно?

Решение

Я думаю, у вас нет допустимой конфигурации IPv6. getaddrinfo() будет возвращать только доступные ответы IPv6, поэтому, если ваша система не имеет адреса IPv6 с глобальной областью действия и маршрута к разрешенному адресу, результат будет удален из набора результатов.

Основная идея заключается в том, что вы вызываете getaddrinfo один раз и получить список адресов для подключения - если бы этот список включал недоступные адреса, программам сначала пришлось бы использовать тайм-аут, прежде чем пытаться использовать другой адрес.

«Семейство адресов для имени хоста не поддерживается» означает, что он распознал, что адрес является адресом IPv6, который не нужно разрешать через DNS, поэтому он пытается сопоставить его со списком разрешенных семейств адресов, но терпит неудачу и возвращает ошибку.

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

Другие советы

Вы имеете право использовать getaddrinfo в качестве первого шага, но он не может выполнять за вас обратный поиск DNS.Вам нужно будет использовать getaddrinfo чтобы преобразовать строковую форму адреса в sockaddr, который затем можно передать getnameinfo чтобы выполнить обратный поиск.

Учитывая вышесказанное, я думаю, что комментарий Карла также уместен.Похоже, ваша система настроена на поддержку IPv6...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top