Как выполнять поиск DNS AAAA, CNAME и SRV на C++?

Мне нужна небольшая программа на C++, которая принимает тип и имя хоста в качестве параметров командной строки, а затем выполняет поиск DNS. Например:

DNSapp AAAA www.google.com

вернет адрес IPv6 с www.google.com и так далее.

Я могу выполнить простой поиск A, просто используя gethostbyname, но я понятия не имею, как выполнять другие поиски. Я пытался найти их в Google, но безуспешно. Любые идеи, как это сделать?


person zaplec    schedule 27.02.2012    source источник
comment
На какой платформе вы находитесь? Windows/MacOS/BSD/Linux?   -  person Ben    schedule 27.02.2012
comment
Я программирую это в Linux   -  person zaplec    schedule 27.02.2012
comment
getnameinfo существует в Linux для поиска RDNS. getaddrinfo также существует, но, похоже, не поддерживает SRV.   -  person Ben    schedule 27.02.2012


Ответы (2)


gethostbyname устарел, используйте getaddrinfo для поиска A / AAAA.

Для SRV и т. д. я рекомендую ldns или родственный libunbound. Последний является полным распознавателем в библиотеке.

Вы также можете просто использовать res_search из стандартной библиотеки Linux.

person Alnitak    schedule 27.02.2012
comment
Разве gethostbyaddr не используется, когда кто-то знает IP-адрес и хочет знать имя хоста? - person zaplec; 27.02.2012
comment
извините, слишком мало кофеина - я имел в виду getaddrinfo и исправил свой ответ - person Alnitak; 27.02.2012
comment
ldns, кажется, подходит для моих нужд. Буду пробовать, надеюсь что-то получится. - person zaplec; 27.02.2012
comment
Как на самом деле использовать этот ldns? Я пытаюсь следовать инструкциям по установке в файле README, но каждый раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке, что makefile не найден. Я скачал последнюю версию ldsn с сайта nlnetlab. Как я могу использовать всю эту библиотеку? Я не очень хорошо знаком с C или C++ и использую внешние библиотеки... - person zaplec; 27.02.2012
comment
ах, если вы новичок, у вас могут возникнуть проблемы с ldns. res_search должно быть достаточно для простых вещей. - person Alnitak; 27.02.2012
comment
В противном случае res_search было бы здорово, но, насколько я понимаю, кажется, что res_search не поддерживает SRV. - person zaplec; 27.02.2012
comment
Неправильный звонок. Он также поддерживает SRV. Вместо этого я собираюсь попробовать res_search. - person zaplec; 27.02.2012
comment
После некоторых усилий и изучения я верю, что смогу достичь своей цели, используя рекомендуемый файл res_search. Спасибо. - person zaplec; 29.02.2012
comment
Через несколько лет res_search должен быть достаточно хорош, но если кто-то хочет асинхронный, стоит попробовать c-ares для DNS, и я написал зонтичную библиотеку для асинхронного прямого/SRV/обратного/DNS поиска: sourceware.org/git/?p= netresolve.git;a=blob;f=README;hb=HEAD - person Pavel Šimerda; 09.11.2014

В Windows GetAddrInfoW является правильной многозначной версией gethostbyname.

Для RDNS getnameinfo идет другим путем.

GetAddrInfoEx может использовать или не использовать записи SRV, мне не удалось выяснить.

person Ben    schedule 27.02.2012