Как получить функциональность, аналогичную команде host
, с помощью c api (или любого другого языка, если на то пошло)? Мне нужно больше информации, чем просто IP-адрес, предоставленный gethostbyname()
; в частности, данные, относящиеся к SMTP.
Как я могу выполнять поиск DNS с помощью C / C ++ в Linux?
Ответы (7)
Если блокирующий (синхронный) запрос подходит, просто используйте res_query()
и свяжите свою программу с -lresolv.
len = res_query(host, C_IN, T_MX, &answer, sizeof(answer));
Я бы предложил FireDNS. Это очень быстрая библиотека C для всех видов DNS-запросов.
Я знаю, что вопрос старый, но я давно искал библиотеку dns, и все ответы здесь меня просто заглушают. Думаю, библиотеки вроде adns / udns написаны не для людей. И у FireDNS давно не работают ссылки для скачивания.
Я нашел poslib как лучшую библиотеку DNS с очень простым интерфейсом.
Мне нравится adns, потому что он позволяет выполнять асинхронные запросы.
И я бы добавил, если вы не пишете почтовый ретранслятор, вам почти наверняка не следует искать записи MX - вместо этого вы должны передавать почту на настроенный пользователем почтовый ретранслятор.
Вы также можете попробовать библиотеку c-ares https://c-ares.haxx.se/, который позволяет отправлять асинхронные DNS-запросы. Он также поставляется с adig - собственной версией утилиты dig для запросов DNS. Вы можете проверить это, чтобы узнать, как анализировать ответ DNS: adig. c источник
Я не думаю, что в стандартной библиотеке C есть функция для этого, но многие языки сценариев имеют эту функцию «встроенной». Например, Perl имеет пакет Net::DNS
:
use Net::DNS;
my @mx = mx("example.com");
foreach $host (@mx) {
print $host;
}
Если вам нужно сделать это на C, быстрый Google обнаружит несколько библиотек C, которые вы можете использовать: