IPv6 адрес для доменного имени - PullRequest
1 голос
/ 13 мая 2011

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

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

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

Спасибо: -)

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

EDIT2: я согласен с вами, у меня проблемы с системой IPV6, я пробовал http://test -ipv6.com / и похоже, что у меня нет адреса IPV6, но с ifconfig возвращается:

adr inet6: fe80::15b:fcff:fe65:d516/64 Scope:Lien

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

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

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

2 голосов
/ 13 мая 2011

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

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

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

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

...