Какой API можно использовать для отправки DHCP-обнаружения, запроса и подтверждения?

Я долго искал и не могу найти работающий пример реализации DHCP-клиента на С#. Я новичок в сетевом программировании, но провожу некоторые исследования, которые требуют от меня написания DHCP-клиента вручную и реализации Auto-IP, если нет DHCP-сервера.

Будем признательны за любые примеры кода или имена встроенных классов С#, которые могут помочь мне в этом.


person Curtis    schedule 06.09.2012    source источник
comment
Я не знаю, как это сделать на С#, но вам, вероятно, следует поискать необработанные сокеты.   -  person Some programmer dude    schedule 07.09.2012
comment
В конце концов я понял, что ОС Microsoft не позволяет нам совершать низкоуровневые вызовы для передачи нашего IP-адреса DHCP. ОС обрабатывает это для нас, и мы просто спрашиваем, какой у нас IP. Выполнение этого вручную может быть выполнено только на других ОС. По крайней мере, это мое текущее понимание этого. Опять же, я действительно новичок во всех вещах, связанных с сетями. Каким-то образом последние 15 лет мне удавалось избегать программирования сетей :-)   -  person Curtis    schedule 26.09.2012


Ответы (2)


Вы не найдете этого; причина в "безопасности".

Обычные сетевые API позволяют работать с уровнем 3 и выше, но DHCP-клиент должен иметь возможность обрабатывать уровень 2; то есть для широковещательной рассылки на MAC FF:FF:FF:FF:FF:FF в пакетах DHCP DISCOVERY

Из соображений безопасности Microsoft сегодня не позволяет создавать пакеты Ethernet на таком низком уровне.

Вы не можете использовать необработанные сокеты; читайте здесь почему:

Ограничения для необработанных сокетов

http://msdn.microsoft.com/en-us/library/ms740548(v=vs.85).aspx

person Pat    schedule 14.09.2012
comment
Хорошо, так каков ответ на мой первоначальный вопрос? - person Curtis; 14.09.2012
comment
Я думаю, что мой ответ ясен; Я боюсь, что вы не найдете то, что ищете, потому что этого не существует... Забудьте о поиске любого класса C#/C++, решающего ваши потребности DHCP-клиента из пользовательской среды. - person Pat; 14.09.2012
comment
Ах.. Это может объяснить, почему я не смог узнать, как это сделать. Это невозможно... Однако я предполагаю, что могу быть DHCP-сервером. Я предполагаю, что Microsoft отправляет вам DHCP-запрос, но вы не можете сделать это программно. Однако я мог бы, вероятно, прослушать такой запрос, а затем ответить на IP-адрес, который его запросил. - person Curtis; 14.09.2012
comment
Вся суть DHCP по сравнению с предшественником BOOTP заключается в том, что DHCP асимметричен; вам нужно обрабатывать Level-2 на клиенте, но вам нужно обрабатывать Level-3 только на сервере. BOOTP требовал уровня 2 для обоих. Вы можете кодировать DHCP-сервер только с помощью API уровня 3 (winsockets), но для кодирования DHCP-клиента вам нужна поддержка ядра. - person Pat; 14.09.2012

Вы можете установить драйвер pccap на свой компьютер и использовать этот API для отправки необработанных пакетов.

person malaugh    schedule 09.05.2013