-
Notifications
You must be signed in to change notification settings - Fork 34
Свечников Роман. 3530901/70201. Lab2 #93
Conversation
DNS сервер не собирается:
Что касается DHCP клиента - зачтено. |
Добавил явное преобразование к нужному типу, теоретически, должно собраться. |
Адреса не соответствуют действительности: Клиент:
Сервер:
|
Прошу прощения, видимо не правильно понял формулировку задания.
Я думал, что важен сам факт ответа (построения корректного сообщения в соответсвии с rfc), и что сам адрес не важен. |
Так. Моя ошибка. Да. Все верно, в таком случае. Сервер общается с клиентами. И отвечает валидно |
Инструкция по использованию
Все Linux-only. Тестировалось на Ubuntu 18.04.
DHCP-клиент
В аргуменах указываем наш MAC-адрес, в командную строку выводится полученный IP и время аренды. Так как протокол подразумевает конкретный порт, его выбор не предусмортрен. Может потребоваться отключить на время имеющийся DHCP-клиент.
DNS-сервер
Можно просто запустить, можно передать в качестве параметра ip адрес, к которому будет привязан сервер (по умолчанию - 127.0.0.53). Так как протокол подразумевает конкретный порт, его выбор не предусмортрен. Может потребоваться отключить на время имеющийся резолвер.
Инструкция по сборке/установке
Сборка как сервера, так и клиента, осуществляется с помощью cmake.
cmake --build <build path> --target lab2_dhcp_client
cmake --build <build path> --target lab2_dns_server
Описание
DHCP-клиент
Реализована базовая последовательность получения адреса: DISCOVERY -> OFFER -> REQUEST -> ACK.
Все остальные пакеты не поддерживаются.
ВАЖНО! Адрес отправителя не будет равным 0.0.0.0, если у хоста уже есть адрес. В коде использован IN_ADDR_ANY, подразумевающий выбор IP самой ОС.
После довольно продолжительных поисков выяснилось, что стандартными средствами сокетов нельзя явно установить адрес 0.0.0.0, если IP адрес уже имеется. Единственный выход - вручную формировать udp-пакет и помещать его в ethernet-кадр. Тем не менее, сервер на моём роутере все равно посылает OFFER в ответ на DISCOVERY с ненулевого IP (хотя, возможно, здесь уже от реализации сервера зависит).
Работа была протестирована в wireshark, вот pcap-файл.
DNS-сервер
Была реализована обработка запросов типа A, AAAA, MX и TXT. На все записи выдается фиксированный ответ в зависимости от типа запроса.
На все остальные запросы отправляется ответ со значением RCODE = Not Implemented.
Работа сервера была протестирована с помощью утилиты nslookup, сервер корректно распознавал запросы и выдавал корректные (с т.ч. протокола) ответы.