前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >wareshark网络协议分析之DHCP

wareshark网络协议分析之DHCP

作者头像
用户1215536
发布2018-02-05 16:29:10
1.5K0
发布2018-02-05 16:29:10
举报

声明:本文关于DHCP协议介绍部分摘自百度百科

一、DHCP协议介绍:

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client。

    作用:

    1、 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。

    2、 DHCP应当可以给用户分配永久固定的IP地址。

    3、 DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。

    4、 DHCP服务器应当向现有的BOOTP客户端提供服务。

交互过程如下图所示:

    其工作流程为:

    1、DHCP Client以广播的方式发出DHCP Discover报文。

    2、所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文。

DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。

    3、DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。

    4、DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。

   5、DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCPServer发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。

   6、DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。

二、wareshark网络抓包分析

(1)抓包过程:

运行环境:win10

说明:DHCP协议是在开始网络连接,动态分配ip地址阶段使用的,所以需要在wareshark抓包的过程中,需要让主机先释放,然后再获取一次ip。

步骤:

1)进入命令行cmd,然后执行命令 ipconfig /release  ,释放主机当前的ip。

2)打开wareshark,开始抓包,显示过滤器中输入bootp,然后回车,用来只显示DHCP协议包。

3)进入命令行cmd,然后执行命令 ipconfig /renew     ,让主机重新获得一个网络配置,包括新的ip。

正常情况下,应该已经抓到DHCP包了,结果如下:

(2)协议分析

 DHCP报文格式:

字段含义:

OP:若是 client 送给 server 的封包,设为 1 ,反向为 2。

HTYPE:硬件类别,Ethernet(以太网) 为 1。

HLEN:硬件地址长度, Ethernet 为 6。

HOPS:若封包需经过 router (路由器)传送,每站加 1 ,若在同一网内,为 0。

xid:事务ID,由客户端选择的一个随机数,被服务器和客户端用来交流请求和响应,客户端用它对请求和应答进行匹配。该ID由客户端设置,由服务器返回,为32位整数。

SECONDS:由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数。

FLAGS:从 0 到 15 共 16 bits ,最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client(为0时表示以单播的形式传输),其余尚未使用。

ciaddr:要是 client 端想继续使用之前取得之 IP 地址,则列于这里。

yiaddr:从 server 送回 client 之 DHCP OFFER 与 DHCPACK封包中,此栏填写分配给 client 的 IP 地址。

siaddr:若 client 需要透过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 之地址。

giaddr:若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。

chaddr:Client 之硬件地址。

sname:Server 之名称字符串,以 0x00 结尾。

file:若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。

options:可选参数域,格式为"代码+长度+数据"。

可以按照下图的方式查看抓包的数据:

整理wareshark收到的4个包:

1)Discover

没有填进表格的内容:

 2)Offer

没有填进表格的内容:

3)Request

4)Ack

结合DHCP报文含义和上述抓包结果可知:DHCP服务器这次给我的PC分配的动态ip是192.168.1.102,在命令行中查了一下,果然是的,其他结果自己对着报文格式体验了一下。

另外根据下面4个包大概可以验证DHCP协议的建立流程:

1)客户端发送给DHCP服务器,请求请求一个ip,由于此时客户端还没有IP地址,所以为ip为0,0,0,0,而客户端也不知道服务器的地址,所以以广播形式发送。报文中还包括客户端的mac地址,主机名字等(应该是用于在服务器中进行区分,以便可以依据客户端要求分配上一次使用的ip等)

2)周围的DHCP服务器收到客户端请求之后,拿出一个没有使用的ip地址放给客户端(很多DHCP服务器都会受到请求也都会发送这个包),根据抓包结果目的地址192.168.1.102,也就是字段中yiaddr的值,这意思是以单播的形式发送的(好像与很多资料不符),不过根据协议字段的含义,如果flags的最左边一bit是1的话,以广播形式发送,为0的话,以单播的形式发送,所以根据之前flags的值为0x000,所以这里以单播形式发送也对的上,只是不清楚明明DHCP协议是客户端用来索取ip的,这里还没有分配完,怎么就可以用了。。。(可能是根据客户端提供的mac地址来的?这里作为一个小菜鸟还是有点不清楚)。

3)客户端给DHCP发送一个确认信息,这里面包括想要的ip地址(从上一步多个CHCP服务器中提供的ip地址选一个,一般选第一个收到的),这里还以广播的形式发送,被接收ip地址的dhcp服务器要再发送一个ack包,没被接受的dhcp服务器撤销刚刚给出的ip地址,以便给其他客户机使用。

4)发出ip地址被接收的dhcp服务器发送一个确认包,这回客户端接收到确认包就可以正式使用这个ip地址了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档