Мне нужно создать пользовательский простой неавторизированный DNS-сервер кэширования в C/С++. Любые указания? Ссылки? Образцы? Спасибо!
Как создать пользовательский простой DNS-сервер в C/С++
Ответ 1
Нет такой вещи, как "простой" кеширующий DNS-сервер, особенно если вы хотите достойную безопасность. Недавние атаки DNS показали, что функция кэширования на рекурсивных DNS-серверах особенно уязвима.
Пересчитайте, действительно ли вам нужна локальная кешировка. Если вы этого не сделаете, вам, вероятно, лучше изменить существующий прокси-код DNS (например, "dnsmasq" ).
Если вы действительно хотите использовать свои собственные, есть хорошие библиотеки, такие как ldns
, которые могут обеспечить доступ к основным DNS-пакеты.
Я использую ldns
самостоятельно в сочетании с libevent
для реализации Fuzzing DNS-сервера, о котором я упоминал в более раннем вопросе.
Ответ 2
Я написал базовый DNS-сервер для собеседования по лицензии BSD.
Может быть, кто-то может найти это полезным:
Ответ 3
Существует множество бесплатных программных реализаций DNS. Вы можете посмотреть их исходный код. Например:
Возможно, вам поможет книга DNS и BIND. И, конечно, есть RFC, которые указывают DNS, см. http://rfc-editor.org/.
Ответ 4
Если вам действительно нужно это сделать (это работа огромная, см. ответ Alnitak), начните с существующей программы хорошая (а не однопользовательский эксперимент не поддерживается в течение долгого времени, например djbdns) и изменить его.
Unbound, вероятно, является разумным выбором для этого. (База кода меньше, чем BIND.)
Ответ 5
Начните с djbdns.
Ответ 6
В качестве альтернативы вы можете использовать Ragel State Machine Compiler для создания своего сервера с нуля.