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

Я только что понял, почему мне все еще нужен синхронизированный блок для AtomicInteger. Все комментарии, а также эта ссылка довольно полезна.

Если официант не синхронизируется, то любой старый бит кода может изменить предикат непосредственно перед тем, как он перейдет в спящий режим, и тогда у нас наверняка возникнут проблемы.

blockquote>

Так что даже это AtomicInteger (на самом деле, тип данных значения на самом деле не имеет значения), непосредственно перед тем, как он перейдет в ожидание, другой поток может изменить свое значение, и это будет неправильно. [113 ]

10
задан Anton Kopylov 16 March 2009 в 08:19
поделиться

5 ответов

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

Переоцените, нужно ли Вам на самом деле локальный cacheing собственный. Если Вы не делаете, Вы - вероятно, более обеспеченный изменяющий существующий код прокси DNS (такой как 'dnsmasq').

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

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

16
ответ дан 3 December 2019 в 13:51
поделиться

Существует набор реализаций бесплатного программного обеспечения DNS. Вы могли посмотреть на их исходный код. Например:

Книга DNS и BIND могла бы быть полезной. И, конечно, существуют RFCs, которые указывают DNS, видят http://rfc-editor.org/.

3
ответ дан 3 December 2019 в 13:51
поделиться

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

Развязанный, вероятно, разумный выбор для этого. (Кодовая база меньше, чем одна BIND.)

3
ответ дан 3 December 2019 в 13:51
поделиться

Запустите с djbdns.

2
ответ дан 3 December 2019 в 13:51
поделиться

Поочередно, Вы могли использовать Компилятор Конечного автомата Ragel для создания сервера с нуля.

1
ответ дан 3 December 2019 в 13:51
поделиться