This repository has been archived by the owner on Sep 9, 2021. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
lab2s (DHCP сервер)
Взаимодействие через udp протокол было реализовано на языке Python.
DHCP - сетевой протокол, позволяющий сетевым устройствам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к так называемому серверу DHCP и получает от него нужные параметры. Сетевой администратор может задать диапазон адресов, распределяемых сервером среди компьютеров. Это позволяет избежать ручной настройки компьютеров сети и уменьшает количество ошибок. Протокол DHCP используется в большинстве сетей TCP/IP.
Формат DHCP пакета
Поля пакета:
opcode - указывает нам на тип DHCP-сообщения. Если в этом поле вы видите значение 0×01, то это говорит нам о том, что сообщение является запросом от клиента к серверу. Такое сообщение еще иногда называется BOOTREQUEST. Если же в поле opCode записано значение 0×02, то это означает, что оно являет ответом DHCP-сервера
Hardware Type - Тип адреса на канальном уровне
Hardware Length (hlen) - Длина аппаратного адреса в байтах. Для протокола Ethernet и, соответственно, мак-адресов, указывается значение 0×06
Hops - Количество промежуточных маршрутизаторов, которые находятся на пути между клиентом и сервером
Transaction ID - Когда клиент начинает процесс получения IP-адреса, он генерирует значение для этого поля, чтобы сервер не перепутал конкретный процесс этого клиента с другим процессом
Seconds Elapsed - Время в секундах с момента начала процесса получения IP-адреса, это время обычно никого не интересует и обычно в нем стоят нули: 0×0000.
Flags - Поле для флагов или специальных параметров протокола DHCP
Client IP Address - Поле, в котором указывается IP-адрес клиента. Клиент заполняет его только в том случае, если у него уже есть IP-адрес и он может ответить на ARP-запрос. Такая ситуация возможно в том случае, если клиент хочет продлить время аренды IP-адреса
Your ID Address - В это поле DHCP-сервер вписывает IP-адрес, который хочет предложить клиенту
Server IP Address - IP-адрес сервера. Сервер указывает свой IP-адрес, когда делает DHCPOFFER
Gateway IP Address - Если используется схема с DHCP Relay Agent, то в этом поле передается его IP-адрес
Client Hardware Address - Если на канальном уровне используется протокол Ethernet, то в это поле записывается MAC-адрес клиента
Server Host Name - Если у сервера есть доменное имя/имя хоста, то он может сообщить его в этом поле, поле не является обязательным
Boot File - Это поле также не является обязательным и служит указателем для бездисковых рабочих станций о том, как называется файл на сервере, которые следует использовать для загрузки
Options - Поле опций, в котором передается львиная доля полезной информации для динамической конфигурации хоста
Поле опция выглядит как номер опции -> длина опции-> аргументы опции
Общий принцип работы DHCP:
Реализация протокола.
Так как в настоящем протоколов количество опций достаточно большое, то были реализованы только некоторые из них, которые позволяют корректно взаимодействовать с настоящими DHCP серверами и клиентами.
Данный протокол работает на tcp сокетах.
Описание работы сервера
После старта сервер прослушивает 67 порт и ожидает посылок. После получения посылки сервер анализирует с помощью функций options_analyzer и options_handler, записывает данные клиента в определенную структуру, где ключом является мак адрес клиента и в зависимости от типа пришедшей посылки DHCPDISCOVER/DHCPREQUEST высылает определенный ответ.
В ответ на DHCPDISCOVER сервер генерирует пакет DHCPOFFER.В пакет записывается рандомный IP адрес в определенном промежутке, который есть возможность редактировать. Данный IP адрес записывается в список, чтобы при генерации следующего IP не сгенерировать такой же. Если клиент запрашивает subnetmask/router/DNS, то данные значения будут равны 255.255.255.0/192.168.0.1/8.8.8.8.
В ответ на DHCREQUEST сервер генерирует DHCPACK в котором в очередной раз перечисляет сетевые настройки, предназначенные для данного клиента
Инструкция по использованию
Тестирование клиента можно проводить без различных утилит так как если есть подключение к интернету, то в windows есть строенный DHCP сервер. Результат работы DHCP клиента:
Для проверки работы необходимо запустить в терминале
Для тестирования DHCP сервера использовался код клиента с github.