Проект реализует кэширующий DNS-сервер, который:
- При запуске загружает ранее сохранённый кэш (если таковой имеется) или начинает работу с пустым кэшем.
- Получает от клиента рекурсивные DNS-запросы через UDP на порту 53.
- При отсутствии записи в кэше отправляет запрос корневому DNS-серверу, получает ответ, извлекает из него всю полезную информацию (включая секции Authority и Additional) и сохраняет ресурсные записи в кэше.
- Обрабатывает типы записей: A, AAAA, NS и PTR.
- Регулярно очищает кэш от записей с истёкшим временем жизни (TTL).
- При завершении работы корректно сериализует данные кэша и сохраняет их на диск для последующего восстановления.
- main.py – Основная точка входа в приложение.
- server.py – Реализация сервера, который принимает и обрабатывает DNS-запросы.
- resolver.py – Модуль, который реализует логику рекурсивного DNS-резолвинга.
- builder.py – Модуль для формирования DNS-пакетов (запросов и ответов).
- cacher.py – Реализация кэширующего модуля с сохранением данных на диск и регулярной очисткой.
- dependencies.py – Загрузка конфигурационных настроек из файла.
- config.json – Файл с конфигурационными настройками сервера (IP-адреса, порты, пути к файлам и т.д.).
- README.md – Документация проекта.
- ОС: Windows 11 (amd64)
- Язык программирования: Python 3.13.0
- Используемые пакеты: Django, click, networkx, numpy, pillow, pip, pyglet, pytest, scipy
-
Клонируйте репозиторий:
git clone https://your-repository-url.git cd your-repository-folder -
Настройте конфигурационный файл: Файл
config.jsonсодержит основные настройки сервера. Проверьте значения следующих параметров:root_server_ip– IP-адрес корневого сервера.root_server_port– порт корневого DNS-сервера.server_ip– локальный IP-адрес сервера.server_port– локальный порт (53).cache_filepath– путь к файлу кэша.clean_period– периодичность очистки кэша (в секундах).
-
Запустите сервер: Выполните скрипт
main.py:python main.py
- При запуске сервер поднимает UDP-сокет и начинает прослушивать порт 53.
- При приёме нового запроса сервер:
- Выполняет разбор DNS-пакета и извлекает вопросы.
- Проверяет наличие ответа в кэше.
- Если записи отсутствуют или устарели, выполняется рекурсивный запрос к корневому серверу.
- Полученные от корневого сервера данные (ответы, авторитетные и дополнительные записи) сохраняются в кэше.
- Фоновый поток периодически проверяет записи в кэше и удаляет записи с истёкшим TTL.
- При завершении работы (например, по нажатию Ctrl+C) сервер сохраняет текущее состояние кэша в файл.
- Сервер выводит в консоль время жизни записей и некоторые диагностические сообщения.
- В случае ошибки запроса к корневому серверу клиенту отправляется ответ с флагами, указывающими на неподдерживаемый запрос.