Как я могу выполнять поиск DNS с помощью C / C ++ в Linux?

Как получить функциональность, аналогичную команде host, с помощью c api (или любого другого языка, если на то пошло)? Мне нужно больше информации, чем просто IP-адрес, предоставленный gethostbyname(); в частности, данные, относящиеся к SMTP.


person hacim    schedule 14.07.2009    source источник
comment
Когда вы упоминаете smtp-related, вы имеете в виду запись MX для домена?   -  person DaveR    schedule 15.07.2009
comment
дубликат stackoverflow.com/questions/1093410/ и несколько других   -  person Alnitak    schedule 15.07.2009


Ответы (7)


Если блокирующий (синхронный) запрос подходит, просто используйте res_query() и свяжите свою программу с -lresolv.

 len = res_query(host, C_IN, T_MX, &answer, sizeof(answer));
person mark4o    schedule 15.07.2009

Я бы предложил FireDNS. Это очень быстрая библиотека C для всех видов DNS-запросов.

person ko-dos    schedule 14.07.2009
comment
Проект выглядит заброшенным (последний выпуск в 2004 г.), и, к сожалению, ссылка для загрузки не работает (firestuff.org ) ... - person Destroyica; 29.03.2012

Я знаю, что вопрос старый, но я давно искал библиотеку dns, и все ответы здесь меня просто заглушают. Думаю, библиотеки вроде adns / udns написаны не для людей. И у FireDNS давно не работают ссылки для скачивания.

Я нашел poslib как лучшую библиотеку DNS с очень простым интерфейсом.

person unDEFER    schedule 13.07.2012

Мне нравится adns, потому что он позволяет выполнять асинхронные запросы.

person Finaldie    schedule 09.12.2011
comment
ps, мне больше нравится FireDns, потому что он намного проще и понятнее: D - person Finaldie; 11.12.2011

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

person caf    schedule 15.07.2009

Вы также можете попробовать библиотеку c-ares https://c-ares.haxx.se/, который позволяет отправлять асинхронные DNS-запросы. Он также поставляется с adig - собственной версией утилиты dig для запросов DNS. Вы можете проверить это, чтобы узнать, как анализировать ответ DNS: adig. c источник

person Daniel Frużyński    schedule 22.10.2018

Я не думаю, что в стандартной библиотеке C есть функция для этого, но многие языки сценариев имеют эту функцию «встроенной». Например, Perl имеет пакет Net::DNS:

use Net::DNS;
my @mx = mx("example.com");
foreach $host (@mx) {
  print $host;
}

Если вам нужно сделать это на C, быстрый Google обнаружит несколько библиотек C, которые вы можете использовать:

person DaveR    schedule 14.07.2009