Вопрос

Я подумываю провести эксперимент по отслеживанию значений DNS различными способами (например, как часто они меняются и тому подобное).Для этого мне нужно будет иметь возможность отправить DNS-запрос непосредственно на сервер, чтобы 1) я знал, с какого сервера он пришел, 2) я мог запрашивать ответы с нескольких серверов и 3) я мог избежать кэша запуска локальной ОС. .

Кто-нибудь знает библиотеку (C#, D, C, C++ в этом порядке предпочтений), которая позволит мне напрямую запрашивать DNS-сервер? В противном случае, знает ли кто-нибудь простое для понимания описание протокола DNS, на основе которого я мог бы реализовать такую ​​систему?

Это было полезно?

Решение

У меня есть опыт только с C, поэтому вот мой список:

  • libresolv — старый, традиционный и стандартный способ.Он доступен в каждом Unix (введите man 3 resolver) и включает в себя такие процедуры, какres_query который делает более или менее то, что вы хотите.Чтобы запросить определенный сервер имен, вы обычно обновляете глобальную переменную _res.nsaddr_list (обратите внимание, что, судя по всему, это не работает с IPv6).

  • ldns это современное и блестящее решение.У вас есть хорошая документация в Интернете.

  • очень распространенная библиотека, но, по-видимому, не поддерживаемая, реклама.

Другие советы

Для C я бы выбрал http://cr.yp.to/djbdns/blurb/library.html (части низкого уровня, если вам нужен полный контроль, т.е. dns_transmit* и друзья) -- возможно, для C# http://www.c-sharpcorner.com/UploadFile/ivxivx/DNSClient12122005234612PM/DNSClient.aspx (сейчас не могу проверить, откуда такое «может быть»!).

Спецификация DNS распространяется на много RFC (см хороший график) и я бы настоятельно советовал нет реализовать заглушку-резольвер с нуля.Есть много возможностей ошибиться.DNS сильно изменилась за последние годы.Если вы смелы и безумны, вот самые важные RFC:

  • RFC 1034, концепции
  • RFC 1035, формат
  • RFC 2181, обновление спецификации для исправления множества ошибок и неясностей.
  • RFC 2671, EDNS (обязателен сегодня)
  • RFC 3597, обработка неизвестных типов записей ресурсов.
  • и многие другие...

libdns (я думаю, это часть привязки).Есть порт cygwin, который может быть полезен для сред Windows.

http://rpm2html.osmirror.nl/libdns.so.21.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top