Как я могу выполнить поиск DNS, используя C / C ++ в Linux? - PullRequest
8 голосов
/ 15 июля 2009

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

Ответы [ 7 ]

18 голосов
/ 15 июля 2009

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

 len = res_query(host, C_IN, T_MX, &answer, sizeof(answer));
1 голос
/ 13 июля 2012

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

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

1 голос
/ 09 декабря 2011

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

1 голос
/ 15 июля 2009

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

0 голосов
/ 22 октября 2018

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

0 голосов
/ 15 июля 2009

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

0 голосов
/ 15 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...