Как создать пользовательский простой DNS-сервер в C/С++

Мне нужно создать пользовательский простой неавторизированный DNS-сервер кэширования в C/С++. Любые указания? Ссылки? Образцы? Спасибо!

Ответ 1

Нет такой вещи, как "простой" кеширующий DNS-сервер, особенно если вы хотите достойную безопасность. Недавние атаки DNS показали, что функция кэширования на рекурсивных DNS-серверах особенно уязвима.

Пересчитайте, действительно ли вам нужна локальная кешировка. Если вы этого не сделаете, вам, вероятно, лучше изменить существующий прокси-код DNS (например, "dnsmasq" ).

Если вы действительно хотите использовать свои собственные, есть хорошие библиотеки, такие как ldns, которые могут обеспечить доступ к основным DNS-пакеты.

Я использую ldns самостоятельно в сочетании с libevent для реализации Fuzzing DNS-сервера, о котором я упоминал в более раннем вопросе.

Ответ 2

Я написал базовый DNS-сервер для собеседования по лицензии BSD.

Может быть, кто-то может найти это полезным:

https://github.com/tomasorti/dns-server

Ответ 4

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

Unbound, вероятно, является разумным выбором для этого. (База кода меньше, чем BIND.)

Ответ 5

Начните с djbdns.

Ответ 6

В качестве альтернативы вы можете использовать Ragel State Machine Compiler для создания своего сервера с нуля.