Есть ли официальный способ обнаружить существующий DHCP-сервер?

Я планирую новую функцию в нашем продукте для поддержки локальной сети. Так как установка будет выполняться относительно нетехническими людьми (это для лодок), я подумал, что было бы полезно автоматически определить, нужно ли нам предоставлять сервер DHCP или нет, в зависимости от того, кто уже был в сети. Есть ли официальный способ проверить, есть ли уже DHCP-сервер (или более одного) в сети?

Мы используем встроенный Linux на продукт.

5 ответов

Решение

Fedora, кажется, имеет следующий пакет в репозитории "dhcp_probe"

Описание: dhcp_probe пытается обнаружить серверы DHCP и BootP в сети Ethernet с прямым подключением. Сетевой администратор может использовать этот инструмент для обнаружения неавторизованных серверов DHCP и BootP.


Выглядит как man dhcp_probe имеет несколько хороших указателей на стратегию обнаружения DHCP, на которые стоит обратить внимание, даже если вы решили сами создать пакеты.

ПАКЕТНЫЕ АРОМАТЫ
Вероятно, ни один пакет запроса не вызовет ответ от каждого возможного сервера BootP и DHCP. Некоторые серверы могут отвечать только на BootP или DHCP, но не на оба. Некоторые серверы могут быть настроены для ответа только на небольшой набор известных клиентов. Некоторые DHCP-серверы предоставляют аренду только небольшому набору известных клиентов, но могут быть готовы (отрицательно) ответить неизвестным клиентам, которые запрашивают продление аренды по неподходящему IP-адресу. Следовательно, dhcp_probe на самом деле отправляет не один, а пять различных пакетов запроса вкуса в надежде спровоцировать ответы от более широкого круга неизвестных серверов.

$ rpm -qil dhcp_probe
Name        : dhcp_probe
Version     : 1.3.0
Release     : 8.fc15
Architecture: x86_64
Install Date: Mon 30 Apr 2012 12:20:46 AM BST
Group       : System Environment/Daemons
Size        : 133600
License     : GPLv2+ and MIT
Signature   : RSA/SHA256, Thu 28 Jul 2011 11:45:40 AM BST, Key ID 067f00b6a82ba4b7
Source RPM  : dhcp_probe-1.3.0-8.fc15.src.rpm
Build Date  : Tue 08 Feb 2011 01:58:57 PM GMT
Build Host  : x86-18.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://www.net.princeton.edu/software/dhcp_probe/
Summary     : Tool for discover DHCP and BootP servers
Description :
dhcp_probe attempts to discover DHCP and BootP servers on a directly-attached
Ethernet network. A network administrator can use this tool to locate
unauthorized DHCP and BootP servers.
/etc/dhcp_probe.cf
/etc/rc.d/init.d/dhcp_probe
/usr/sbin/dhcp_probe
/usr/share/doc/dhcp_probe-1.3.0
/usr/share/doc/dhcp_probe-1.3.0/AUTHORS
/usr/share/doc/dhcp_probe-1.3.0/COPYING
/usr/share/doc/dhcp_probe-1.3.0/COPYING.GPL
/usr/share/doc/dhcp_probe-1.3.0/COPYING.LIB
/usr/share/doc/dhcp_probe-1.3.0/NEWS
/usr/share/doc/dhcp_probe-1.3.0/README
/usr/share/doc/dhcp_probe-1.3.0/TODO
/usr/share/man/man5/dhcp_probe.cf.5.gz
/usr/share/man/man8/dhcp_probe.8.gz

Давайте не будем путать слово "официальный" с понятием "общепринятый метод".

Одним из общепринятых методов является выдача пакета DHCPDiscover и поиск ответа.

Если у вас установлен "dhcpcd", вы можете использовать флаг "-T", чтобы получить "тестовый" режим, который просто повторяет настройки, но фактически не устанавливает IP-адрес и шлюз.

dhcpcd -T

и вывод:

emily ~ # dhcpcd -T wlan0
dhcpcd[6205]: version 5.2.12 starting
dhcpcd[6205]: wlan0: broadcasting for a lease
dhcpcd[6205]: wlan0: offered 192.168.2.194 from 192.168.2.1
interface=wlan0
pid=6205
reason=TEST
skip_hooks=lookup-hostname
new_broadcast_address=192.168.2.255
new_dhcp_lease_time=86400
new_dhcp_message_type=2
new_dhcp_server_identifier=192.168.2.1
new_domain_name_servers='192.168.2.1 193.189.160.13 193.189.160.23'
new_ip_address=192.168.2.194
new_network_number=192.168.2.0
new_routers=192.168.2.1
new_subnet_cidr=24
new_subnet_mask=255.255.255.0

Вы могли бы сделать свой собственный DHCPDISCOVER, чтобы увидеть, настроено ли что-либо там отвечать, но если DHCP-сервер заблокирован в соответствии со спецификацией MACS, вы можете не получить ответ.

Теоретически вы могли бы выполнить сканирование портов UDP для UDP67 и UDP68, но я не уверен, что это отличная идея, так как это скорее всего будет помечено как возможное вредоносное поведение.

Вообще говоря, продукты, которые не являются сетевым оборудованием, не должны предлагать DHCP. Это усложняет работу реального сисадмина, особенно если он имеет тенденцию включаться по умолчанию, если теряет свои настройки.

Это одна вещь, которая всегда сводила меня с ума из-за старых дерьмовых конвертеров Hawking Ethernet в USB для "сервера печати".

Отправьте запрос DHCP и подождите, чтобы увидеть, получите ли вы предложение DHCP.

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

Другие вопросы по тегам