Проектная лаборатория
Собственный DNS-сервер
Этап 07 · Основные этапы
Разбор сжатого пакета
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе мы разберём раздел вопросов DNS, в котором последовательности меток сжаты. Вы получите несколько вопросов и должны разобрать их, а затем вернуть такой же раздел вопросов (сжатие не требуется) вместе с ответами. В разделе ответов верните запись типа A для каждого вопроса. Значения этих записей A можно выбрать произвольно.
Поскольку структура разделов вопросов и ответов уже известна из предыдущих этапов, здесь мы приведём только общее описание входящего пакета и ожидаемого ответа.
Тестирующая система отправит следующий пакет:
| ------------------------------------------ |
| Header |
| ------------------------------------------ |
| Question 1 (un-compressed label sequence) |
| ------------------------------------------ |
| Question 2 (compressed label sequence) |
| ------------------------------------------ |В ответ тестирующая система ожидает:
| ------------------------------------------ |
| Header |
| ------------------------------------------ |
| Question 1 (un-compressed label sequence) |
| ------------------------------------------ |
| Question 2 (un-compressed label sequence) |
| ------------------------------------------ |
| Answer 1 (un-compressed label sequence) |
| ------------------------------------------ |
| Answer 2 (un-compressed label sequence) |
| ------------------------------------------ |Сжимать ответ не требуется. Мы никогда не попросим сделать что-либо, что приведёт к превышению ограничения на размер UDP-буфера, поэтому о сжатии ответного пакета можно не беспокоиться. Если же хочется дополнительной сложности, можете сжимать DNS-пакет: тестирующая система поддерживает и такой вариант.
Тип вопроса всегда будет A, а класс — IN.
Механизм сжатия описан в этом разделе RFC.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init dns-server ./my-dns-server --language go2. Откройте папку в IDE
cd ./my-dns-serverРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage yc9Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.