Запрос DHCP-сервера в C#

Мне нужно получить сопоставление MAC-адреса с IP-адресом, хранящимся на DHCP-сервере, либо с помощью программы, работающей на самом сервере, либо, что предпочтительнее, с помощью программы, работающей на одном из DHCP-клиентов.

Я понимаю, что утилита netsh может быть использована для получения дампа, однако мне это не очень удалось.

Любые рабочие примеры или намек на это?

У меня есть права администратора на DHCP-сервере

Редактировать

Я не хочу использовать кеш arp, так как это потребует от меня либо широковещательной передачи ping (что не разрешено в Windows), либо ping всех возможных IP-адресов подсети (что занимает много времени).

Я уверен, что DHCP-сервер хранит сопоставление MAC-адреса с IP-адресом, как я могу использовать эту информацию для сопоставления MAC-адреса с IP-адресом?


person Kazoom    schedule 08.02.2010    source источник
comment
я отправил его на сервер с ошибкой, но не получил никакого примечательного ответа, я чувствую, что этот вопрос требует знания того, как был написан сервер dhcp и как его взломать. я пытаюсь решить проблему программирования здесь. если у вас есть проблемы с вопросом, запросите закрытие и не голосуйте против, это отпугивает других от решения вопроса.   -  person Kazoom    schedule 09.02.2010
comment
@bzlm Я был бы признателен, если бы вы помогли мне найти ответы, а не искать ошибки и голосовать против, если вы чувствуете, что ответ не является вопросом программирования, вы можете проголосовать за закрытие вопросов. Мне пришлось дважды опубликовать сообщение, так как у обоих форумов разная аудитория, и все я ищу программное решение проблемы, которое я не нашел в serverfault.   -  person Kazoom    schedule 09.02.2010
comment
@bzlm bytes.com/ topic/net/answers/ теперь скажи мне, это программирование или нет. Я искал что-то в этих строках.   -  person Kazoom    schedule 09.02.2010
comment
@bzlm, что нытье, которое вы иррационально отрицаете, отпугивает людей от просмотра этого.   -  person Kazoom    schedule 09.02.2010
comment
Здесь есть связанный с этим вопрос: stackoverflow.com /вопросы/1510993/   -  person bzlm    schedule 11.02.2010


Ответы (3)


Для этого можно использовать компонент DHCP Objects из Windows 2000 Resource Kit. Несмотря на то, что этот компонент трудно найти, он создан для Windows 2000, по словам Microsoft, в июле 2010 года жизнеобеспечение прекратилось, и у него очень мало документации, он работает.

  1. Загрузите инструмент набора ресурсов под названием DHCP Objects, например, здесь если вы не можете найти его в Microsoft. Это даст вам файл .exe, который, в свою очередь, установит компонент DHCP Objects.
  2. Зарегистрируйте файл DHCPOBJS.DLL с помощью regsvr32 или создайте для него приложение COM+. Что применимо, зависит от того, как компонент COM будет использоваться в вашей системе.
  3. Используйте средство импорта библиотеки типов tlbimp.exe, чтобы создать управляемую оболочку вокруг DHCPOBJS.DLL теперь, когда она зарегистрирована системой.
  4. В Visual Studio добавьте ссылку на управляемую оболочку. Его сгенерированное по умолчанию имя — DhcpObjects.dll.

Теперь вы можете написать такой код для компонента:

using DhcpObjects;
class Program {
    static void Main(string[] args) {
        var manager = new Manager();
        var server = dhcpmgr.Servers.Connect("1.2.3.4");
        // query server here
    }
}

Установщик также предоставляет файл справки Windows, который содержит дополнительную документацию о том, как запрашивать DHCP-сервер и управлять им. Раздел "Объектная модель" весьма полезен.

person bzlm    schedule 11.02.2010

Будет ли использование arp -a делать свое дело... на моей машине я получаю вывод:

У меня есть адрес mac/ip, замененный фиктивными значениями, чтобы показать результаты...

C:\Documents and Settings\Tom>arp -a

Interface: 10.203.24.196 --- 0xf0007
  Internet Address      Physical Address      Type
  10.203.24.198         02-50-f3-10-14-06     dynamic

C:\Documents and Settings\Tom>

Распаковывая с помощью System.Diagnostics.Process, вы можете перенаправить вывод во входной поток и прочитать из него...

Надеюсь, это поможет. С уважением, Том.

person t0mm13b    schedule 08.02.2010
comment
не хочу использовать кеш arp, так как это потребует от меня либо широковещательной передачи ping (что не разрешено в Windows), либо ping всех возможных IP-адресов подсети (что занимает много времени). Я уверен, что DHCP-сервер хранит сопоставление MAC-адреса с IP-адресом, как я могу использовать эту информацию для сопоставления MAC-адреса с IP-адресом? - person Kazoom; 09.02.2010
comment
@Kazoom Вы используете netsh на DHCP-сервере? Есть ли у вас достаточные административные права для запроса сервера? т.е. если вы используете оснастку DHCP MMC, вы можете увидеть информацию? - person bzlm; 09.02.2010
comment
@Kazoom: это будет работать на самом DHCP-сервере, вы можете каким-то образом создать веб-сервис, сокеты tcp / ip или что-то еще, чтобы запросить информацию у клиента ... - person t0mm13b; 09.02.2010
comment
да, у меня есть права администратора на DHCP-сервере, как только я получу информацию с DHCP-сервера, да, я смогу разместить веб-службу - person Kazoom; 09.02.2010

person    schedule
comment
nbtstat -A MICROSOFT_DHCP_SERVER_IP - person AZ_; 13.10.2010
comment
он напечатает все арендованные IP-адреса - person AZ_; 13.10.2010
comment
но работает только с DHCP-сервером MICROSOFT. Я пробовал это с Linux, но не дал никаких результатов - person AZ_; 13.10.2010