Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Кэширующщий DNS сервер

Задание для курса "Протоколы Интернета"

Справка

Принцип работы сервера

Сервер с помощью сокетов слушает udp на 53 порту. Когда сервер получил запрос, то он проверяет есть ли информация в кэше. Если информации в кеше нет, то он, используя резольвер Яндекса находит сначала авторитетный сервер для интересующей нас доменной зоны, потом находить IP адрес авторитетного сервера и делает к нему запрос ANY. Все ответы от сервера добавляются в кэш. После этого пользователю возвращается ответ из кэша (если его в кэше так и не оказалось, то делается запрос к резольверу, чтобы всё-таки дать ответ пользователю).

Если в кэше сервера есть нужная информация, то информация возращается из кэша.

Сервер умеет возвращать из кеша информацию о следующих типах записей: А, TXT, MX

Дополнительно к серверу написан маленький клиент, который делает запросы к серверу и выводить полученную информацию в удобочитаемом виде.

Как запустить сервер?

Установить зависимости и от имени супер пользователя вызвать

sudo python3 server.py

Чтобы воспользоваться клиентом нужно:

python3 client.py domain record-type

Домен и тип записи обязателен. Доступные значения для типа записи: A, TXT, MX

Примеры запуска

1 Простой запрос

Запрос клинета и ответ ему: First request

WireShark: WireShark request

2 Повторный запрос

Повторный запрос клиента: First request

WireShark: WireShark request

3 Получение информации, которую раньше не запрашивал, но она лежит в кэше

Запрос First request

WireShark: First request

Выгрузка кэша:

e1.ru&A&e1.ru&A&299&4&195.19.220.12
e1.ru&NS&e1.ru&NS&300&11&ns.hsdrn.ru
e1.ru&NS&e1.ru&NS&300&10&ns1.ngs.ru
e1.ru&MX&e1.ru&MX&56&17&0 10 2 109 120 6 121 97 110 100 101 120 3 110 101 116 0 
e1.ru&TXT&e1.ru&TXT&293&27&26 118 61 115 112 102 49 32 114 101 100 105 114 101 99 116 61 95 115 112 102 46 101 49 46 114 117 
e1.ru&TXT&e1.ru&TXT&293&69&68 103 111 111 103 108 101 45 115 105 116 101 45 118 101 114 105 102 105 99 97 116 105 111 110 61 121 112 76 54 88 69 66 79 78 49 97 69 111 97 48 80 107 115 102 70 104 95 87 82 119 75 75 55 113 78 84 116 117 116 66 75 76 111 88 116 102 52 111 
e1.ru&TXT&e1.ru&TXT&293&38&37 109 97 105 108 114 117 45 118 101 114 105 102 105 99 97 116 105 111 110 58 32 48 99 99 57 100 100 100 50 48 53 102 51 57 97 57 101 
e1.ru&SOA&e1.ru&SOA&300&35&3 110 115 49 192 12 6 97 100 109 105 110 115 192 12 120 103 142 140 0 0 3 132 0 0 1 44 0 39 141 0 0 0 1 44 

Разделителем выступает &. Первые два значения - это ключ в кэше. Далее идут данные, которые нужно будет передать пользователю: Имя, тип записи, время жизни (оно пересчитывается для пользователя с учётом того, когда сервер сделал запрос), длина данных и сами данные (числа это hex, который был приведён к инту, чтобы можно было сохранять в файл и загружать из него кэш).

About

Task for protocols

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages