Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DNS_Server

Описание проекта

Проект реализует кэширующий 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

Установка и запуск

  1. Клонируйте репозиторий:

    git clone https://your-repository-url.git
    cd your-repository-folder
  2. Настройте конфигурационный файл: Файл config.json содержит основные настройки сервера. Проверьте значения следующих параметров:

    • root_server_ip – IP-адрес корневого сервера.
    • root_server_port – порт корневого DNS-сервера.
    • server_ip – локальный IP-адрес сервера.
    • server_port – локальный порт (53).
    • cache_filepath – путь к файлу кэша.
    • clean_period – периодичность очистки кэша (в секундах).
  3. Запустите сервер: Выполните скрипт main.py:

    python main.py

Принцип работы

  • При запуске сервер поднимает UDP-сокет и начинает прослушивать порт 53.
  • При приёме нового запроса сервер:
    • Выполняет разбор DNS-пакета и извлекает вопросы.
    • Проверяет наличие ответа в кэше.
    • Если записи отсутствуют или устарели, выполняется рекурсивный запрос к корневому серверу.
    • Полученные от корневого сервера данные (ответы, авторитетные и дополнительные записи) сохраняются в кэше.
  • Фоновый поток периодически проверяет записи в кэше и удаляет записи с истёкшим TTL.
  • При завершении работы (например, по нажатию Ctrl+C) сервер сохраняет текущее состояние кэша в файл.

Логи и обработка ошибок

  • Сервер выводит в консоль время жизни записей и некоторые диагностические сообщения.
  • В случае ошибки запроса к корневому серверу клиенту отправляется ответ с флагами, указывающими на неподдерживаемый запрос.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages