wareshark网络协议分析之DHCP
声明:本文关于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
1 | 1 | 6 | 0 |
0x0fe29f3b | |||
0 | 0x000 | ||
0,0,0,0 | |||
0,0,0,0 | |||
0,0,0,0 | |||
0,0,0,0 | |||
IntelCor_83:C1:88(d0:7e:35:83:c1:81) |
没有填进表格的内容:
2)Offer
2 | 1 | 6 | 0 |
0x0fe29f3b | |||
0 | 0x000 | ||
0,0,0,0 | |||
192.168.1.102 | |||
0,0,0,0 | |||
0,0,0,0 | |||
IntelCor_83:C1:88(d0:7e:35:83:c1:81) |
没有填进表格的内容:
3)Request
1 | 1 | 6 | 0 |
0x0fe29f3b | |||
0 | 0x000 | ||
0,0,0,0 | |||
0,0,0,0 | |||
0,0,0,0 | |||
0,0,0,0 | |||
IntelCor_83:C1:88(d0:7e:35:83:c1:81) |
4)Ack
2 | 1 | 6 | 0 |
0x0fe29f3b | |||
0 | 0x000 | ||
0,0,0,0 | |||
192.168.1.102 | |||
0,0,0,0 | |||
0,0,0,0 | |||
IntelCor_83:C1:88(d0:7e:35:83:c1:81) |
结合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地址了。
wareshark网络协议分析之DHCP的更多相关文章
- wareshark网络协议分析之ARP
一.ARP协议简介 简单的说ARP协议就是实现ip地址到物理地址的映射.当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址(物理地址)来确定网络接口的. ARP ...
- 协议分析 - DHCP协议解码详解
协议分析 - DHCP协议解码详解 [DHCP协议简介] DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
- linux 网络协议分析---3
本章节主要介绍linxu网络模型.以及常用的网络协议分析以太网协议.IP协议.TCP协议.UDP协议 一.网络模型 TCP/IP分层模型的四个协议层分别完成以下的功能: 第一层 网络接口层 网络接口层 ...
- TFTP网络协议分析---15
TFTP网络协议分析 周学伟 文档说明:所有函数都依托与两个出口,发送和接收. 1:作为发送时,要完成基于TFTP协议下的文件传输,但前提是知道木的PC机的MAC地址,因为当发送TFTP请求包时必须提 ...
- 网络协议分析之wireshark---抓包使用
Wireshark基本介绍和学习TCP三次握手 之前写过一篇博客:用 Fiddler 来调试HTTP,HTTPS. 这篇文章介绍另一个好用的抓包工具wireshark, 用来获取网络数据封包,包括ht ...
- linux网络协议
网络协议 本章节主要介绍linxu网络模型.以及常用的网络协议分析以太网协议.IP协议.TCP协议.UDP协议 一.网络模型 TCP/IP分层模型的四个协议层分别完成以下的功能: 第一层 网络接口层 ...
- Wireshark数据抓包分析——网络协议篇
Wireshark数据抓包分析--网络协议篇 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...
- UNIX网络编程——分析一帧基于UDP的TFTP协议帧
下图是UDP的段格式: 相比TCP段格式,UDP要简单得多,也没啥好说的,需要注意的是UDP数据长度指payload加上首部的长度. 下面分析一帧基于UDP的TFTP协议帧: 以太网首部 0000: ...
随机推荐
- spring cloud 订单调用用户
下面实现一个订单调用用户实现例子,使用技术只要是spring,为以后操作负载打基础.(基于昨天别人问我的基础上做了实例供大家参考) 1.用户工程截图 : 2.用户工程启动类 3.用户工程控制类 4. ...
- Oracle raw数据类型
RAW的声明方式为RAW(L),L为长度,以字节为单位,它存数的是16进制的数据.作为数据库列最大2000,作为变量最大32767字节. RAW类型的好处就是:在网络中的计算机之间传输 RAW 数据时 ...
- mysql编译参数详解(./configure)
1.--prefix=PREFIX:指定程序安装路径: 2.--enable-assembler:使用汇编模式:(文档说明:compiling in x86 (and sparc) versions ...
- 剖析与优化 Go 的 web 应用
https://mp.weixin.qq.com/s/HDsbZLOK3h8-XjejvPH2sA https://studygolang.com/articles/12685
- API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd API 网关出现的原因
API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd http://www.infoq.com/cn/articles/compa ...
- jQuery改变CSS使DIV显示
HTML: <div id="mazey" style="display:none;">www.mazey.net</div> jQue ...
- 我的Android进阶之旅------>Android项目运行报java.lang.NoClassDefFoundError错误的解决办法
今天在运行一个Android项目的时候,报了以下错误: D/AndroidRuntime( 3859): Shutting down VM E/AndroidRuntime( 3859): FATAL ...
- vloatile总结与synchronized对比
原文地址:https://www.cnblogs.com/xiaoxian1369/p/5411877.html 1.要使volatile变量提供理想的线程安全,必须同时满足以下两个条件:1).对变量 ...
- $Android中日期和时间选择器的实现
创建日期或时间选择窗口需要弹出Dialog的时候,Activity类的showDialog方法已经弃用了,而推荐使用的是DialogFragment,本文总结一下其具体用法. (一)日期选择器 1.创 ...
- STM32 USB虚拟串口
串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方 ...