简介:
为什么要分析dhcp数据包呢?因为一般情况下,DHCP服务器也就下发一下网关地址,DNS,而使用PXE、WDS、MDT、等高级网络应用,需要dhcp服务器下发一些可选项的内容。
尤其是跨网关、三层交换等一些复杂环境,需要验证DHCP是否有正常下发这些可选项。以前常用的Fiddler,并不擅长进行这个数据包的分析。就用Wireshark吧。
一:安装
https://www.wireshark.org/
https://nmap.org/npcap/
https://www.winpcap.org/
上面三个地址,分别是wireshark、npcap、winpcap的官网。
安装wireshark必须配合一个pcap类的驱动才可以。
我以前用Fiddler的时候,用的是npcap,继续用它,因为听说Winpcap已经停止更新了。
安装没啥特别的。如果你只下载wireshark,那么安装的时候可以选择自动下载winpcap。
二:监听
打开Wireshark,就是这个界面,选择一个需要捕获的网络连接即可。
我这里是用的WLAN,双击 选一下就可以了。
三:过滤器
现代计算机已经进入互联网时代,各个后台程序,检查更新、保持连接、检查邮箱、检索通知……操作太多了,这里将不停的滚动被捕获的数据包。
我们将使用过滤器来过滤只显示我们需要的数据包,其他的数据包就不关心了,毕竟每次抓包分析,都是有特定的目的。
针对DHCP的数据包,过滤器输入bootp或者bootparams,只显示DHCP相关数据包。
四:捕获(抓包)
我们需要捕获完整的一次DHCP数据包,那么我们就需要先向DHCP服务器请求一次。
我们已经有IP地址了,再次请求前,应该先释放已请求的IP地址。
具体命令是:
ipconfig /release #释放IP
ipconfig /renew #申请DHCP获取IP
这样我们就完成了一次释放IP,重新向DHCP服务器申请IP的过程。
当我们看到右边有DHCP ACK这个类型的数据包后,就可以点左上角的红方块,停止抓包了。
五:分析
根据抓包的结果,我们一共看到了五个DHCP相关的数据包。
release,释放IP,也要跟DHCP服务器沟通,这个地址,服务器可以继续使用了。
discover,广播发现dhcp服务器,在没有ip地址的时候,我们和傻子一样,并不知道找哪个服务器申请IP,需要广播,大喊一声,我新来的,要个IP,你们谁管这个事呀?
offer,分配IP地址,仅仅是分配,客户端并没有开始使用这个IP地址,一是客户端没有确认,服务器不能把这个标记为已用,二是如果网络中有多个DHCP,都在相应客户端,那么客户端用了哪个呢?
request,请求使用,如果客户端收到网路上多台DHCP服务器的回应﹐只会挑选其中一个DHCP Offer(通常是第一个)并且向网路发送一个DHCP Request广播,告诉所有DHCP服务器它将指定接受哪一台服务器提供的IP位址。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址, 同时,客户端还会发送一个ARP封包, 查询网路上有没有其他机器使用该IP地址, 如果发现该IP被占用, 客户端会发送一个DHCP Decline封包给DHCP服务器, 拒绝接受其DHCP Offer,并重新开始发送DHCP Discover信息。
ack,当DHCP服务器收到DHCP客户机回答的DHCP Request请求信息之后, 它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP Ack确认信息。以确认IP地址的正式生效。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址
六:验证服务器
这里就是我们收到的DHCP可选参数66和67
我是设置在openwrt里面了,具体设置位置在这里。
请忽略前后IP地址不一致的问题。这是两次实验才抓够的图。