如果客户端有了 IP 地址,将不再发送 DHCP Discover 包。这时,如果要获取网络内 DHCP 服务器信息,可以使用 netwox 提供的编号为 179 的模块来实现。该模块通过向 DHCP 服务器广播发送一个 DHCP INFORM 包,以获取相关的配置参数。
DHCP 服务器接收到该数据包后,将根据租约查找相应的配置信息,并返回一个 DHCP ACK 消息。该消息包括相应的客户配置参数,但不包括分配的网络地址。
【实例】获取DHCP服务器详细的网络配置信息,执行命令如下:
执行命令后将向 DHCP 服务器广播发送 INFORM 报文,同时会得到 DHCP 服务器返回的 ACK 报文。为了方便讲解,下面将信息进行拆分后分别讲解。
1) 发送的 INFORM 报文信息的输出信息如下:
I send a INFORM: DHCP____________________________________________________________. | op=request hops=0 xid=52FEF936 secs=0 flags=0000 | | client=192.168.59.133 your=0.0.0.0 | | server=0.0.0.0 agent=0.0.0.0 | | clienteth=00:0C:29:FD:DE:B8 | #客户端MAC地址 | sname: | | file: | | msgtype: inform | | clientidtype: 1 | | clientid: 000c29fddeb8 | | reqlist[0]: 1 (subnetmask) | #请求的网络配置信息 | reqlist[1]: 3 (gateways) | | reqlist[2]: 4 (timeservers) | | reqlist[3]: 5 (nameservers) | | reqlist[4]: 6 (dnsservers) | | reqlist[5]: 7 (logservers) | | reqlist[6]: 9 (lprservers) | | reqlist[7]: 12 (hostname) | | reqlist[8]: 15 (domainname) | | reqlist[9]: 28 (broadcastad) | | reqlist[10]: 31 (performroutdisc) | | reqlist[11]: 33 (staticroutes) | | reqlist[12]: 40 (nisdomain) | | reqlist[13]: 41 (nisservers) | | reqlist[14]: 51 (ipadleasetime) | | reqlist[15]: 58 (renewaltime) | | reqlist[16]: 59 (rebindingtime) | | reqlist[17]: 64 (nispdomain) | | reqlist[18]: 65 (nispserver) | | reqlist[19]: 69 (smtpservers) | | reqlist[20]: 70 (pop3servers) | | reqlist[21]: 71 (nntpservers) | | reqlist[22]: 72 (wwwservers) | | reqlist[23]: 74 (ircservers) | |_______________________________________________ |
以上输出信息中,第 1 行表示 DHCP 客户端向 DHCP 服务器发送了 INFORM 报文,用来请求网络配置信息。
下面的信息为报文包含的信息。其中,xid 表示事务 ID 为 52FEF936;client 表示当前客户端的 IP 地址为 192.168.59.133;clienteth 表示当前客户端的 MAC 地址为 00:0C:29:FD:DE:B8。
2) 客户端收到 DHCP 服务器返回的 ACK 报文,并输出如下信息:
Server sent us this ACK: DHCP____________________________________________________________. | op=reply hops=0 xid=52FEF936 secs=0 flags=0000 | | client=192.168.59.133 your=0.0.0.0 | | server=192.168.59.254 agent=0.0.0.0 | | clienteth=00:0C:29:FD:DE:B8 | | sname: | | file: | | msgtype: ack | | serverid: 192.168.59.254 | #服务器IP地址 | subnetmask: 255.255.255.0 | #子网掩码 | gateways[0]: 192.168.59.2 | #网关 | dnsservers[0]: 192.168.59.2 | #DNS服务地址 | domainname: 'localdomain' | #域名 | broadcastad: 192.168.59.255 | #广播地址 | end | |____________________________________________________ |
以上输出信息中,第 1 行表示 DHCP 返回了 ACK 报文。其中,xid 的值也为 52FEF936,子网掩码为 255.255.255.0,网关为 192.168.59.2。
3) 为了验证该命令发送的数据包,下面通过抓包进行查看,如图所示。
在获取 DHCP 服务器信息时,为了避免被发现,可以伪造 IP 地址和 MAC 地址。
例如,设置 IP 地址为 192.168.59.150,MAC 地址为 b1:b2:b3:0a:1a:3a。执行命令如下:
输出信息如下:
I send a INFORM: DHCP____________________________________________________________. | op=request hops=0 xid=5D72AD9C secs=0 flags=0000 | | client=192.168.59.150 your=0.0.0.0 | | server=0.0.0.0 agent=0.0.0.0 | | clienteth=B1:B2:B3:0A:1A:3A … #省略其他信息
其中,客户端的 IP 地址为伪造的地址 192.168.59.150,客户端的 MAC 地址为伪造的址 B1:B2:B3:0A:1A:3A。