linux查找网络中的dhcp,检测网络中的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的协议。

646252d8d461bd1989d4ebbf0904f711.png

dhcp client请求的过程如下:

3f76cf97e34de48525a0a84ce555c8c8.png

我们看一下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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值