有没有官方的方法来检测现有的DHCP服务器?

我正在计划在我们的产品上支持局域网的新function。 由于安装是由相对非技术人员完成的(我认为自动检测是否需要提供DHCP服务器,这取决于networking上是否有DHCP服务器)。 有没有官方的方法来检查networking上是否有DHCP服务器(或多个)?

我们在产品上使用embedded式Linux。

Fedora似乎在repos“dhcp_probe”中有以下包

说明:dhcp_probe尝试在直连networking上发现DHCP和BootP服务器。 networkingpipe理员可以使用此工具来定位未经授权的DHCP和BootP服务器。


看起来像man dhcp_probeman dhcp_probe有一些很好的DHCP发现策略的指针,可能值得一看,即使你决定自己去制作数据包。

包风味
没有一个请求包很可能会引起每个可能的BootP和DHCP服务器的响应。 某些服务器可能只响应BootP或DHCP,但不能同时响应。 有些服务器可能被configuration为只响应一小组已知的客户端。 某些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”标志来获得“testing”模式,它只是回应设置,而不会实际设置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来查看是否有任何configuration可以回答,但是如果DHCP服务器被locking到具体的MACS,你可能得不到回应。

理论上你可以对UDP67和UDP68进行UDP端口扫描,但是我不确定这是一个好主意,因为它很可能被标记为可能的恶意行为。

一般来说,非networking设备的产品不应该提供DHCP。 这使得一个实际的系统pipe理员的工作变得更加困难,特别是如果它失去了设置,就有可能默认开启。

这是一件事情,总是让我对旧的蹩脚的霍金以太网殴打USB“打印服务器”转换器箱。

发送一个DHCP请求,然后等待看看是否有DHCP提供。

更糟糕的方法 – build立一个网卡,以通过DHCP获取IP地址,然后检查是否收到APIPA地址。 如果它收到APIPA地址,则不太可能存在连接到有问题的networking的现有DHCP服务器。