检测网络中的DHCP Server

DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)缩写,它的前身是 BOOTP。DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是服务器端,而另一个是客户端。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据。
那么在网络测试环境中,可能存在着一些私用的DHCPServer,这样会影响到其他环境的运行,尤其是在同一个局域网内,那么侦测局域网内的dhcp server的存在,避免第三方的dhcp对实验的影响,我们可以模拟发现当前的dhcp server的运行。
一般当开启DHCP的时候,会使用mac地址的过滤,以防止对其他物理环境的影响。在dhcpd.conf文件中添加: deny unknown-clients;选项。

如果环境中开启了一些dhcp的server,怎么才能检测出环境中的dhcp的存在呢。我们要了解一些DHCP的知识。
DHCP简单的来说是BOOTP + Dynamic allocation of IP addresses。DHCP又比BOOTP多了一种租约的概念,有效且动态的分配客户端的 TCP/IP 设定。那么我们先了解一下BOOTP的协议。

bootp message

dhcp client请求的过程如下:

dhcp req

我们看一下DHCP的 discovery 和 offer的消息格式,我们可以组装我们的数据包。
http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol

组装数据包如下:

packet += b'\x01'   #Message type: Boot Request (1)
packet += b'\x01'   #Hardware type: Ethernet
packet += b'\x06'   #Hardware address length: 6
packet += b'\x00'   #Hops: 0 
packet += transactionID       #Transaction ID
packet += b'\x00\x00'    #Seconds elapsed: 0
packet += b'\x80\x00'   #Bootp flags: 0x8000 (Broadcast) + reserved flags
packet += b'\x00\x00\x00\x00'   #Client IP address: 0.0.0.0
packet += b'\x00\x00\x00\x00'   #Your (client) IP address: 0.0.0.0
packet += b'\x00\x00\x00\x00'   #Next server IP address: 0.0.0.0
packet += b'\x00\x00\x00\x00'   #Relay agent IP address: 0.0.0.0
packet += b'\x00\x26\x9e\x04\x1e\x9b'   #Client MAC address: 00:26:9e:04:1e:9b,or local MacAddress

packet += b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'   #Client hardware address padding: 00000000000000000000
packet += b'\x00' * 67  #Server host name not given
packet += b'\x00' * 125 #Boot file name not given
packet += b'\x63\x82\x53\x63'   #Magic cookie: DHCP
packet += b'\x35\x01\x01'   #Option: (t=53,l=1) DHCP Message Type = DHCP Discover
#packet += b'\x3d\x06\x00\x26\x9e\x04\x1e\x9b'   #Option: (t=61,l=6) Client identifier
packet += b'\x3d\x06' + macaddress
packet += b'\x37\x03\x03\x01\x06'   #Option: (t=55,l=3) Parameter Request List
packet += b'\xff'   #End Option

使用socket 将封装后的数据包发送出去。然后recv数据包进行数据包的分析。
我们可以分析后的数据看到:
DHCP Server : 192.168.8.xxx
Offered IP address : 192.168.8.1xx
Next Server : 192.168.9.1xx
subnet mask : 192.168.8.1

发表评论

您的电子邮箱地址不会被公开。