Wireshark抓包分析DHCP

news2024/11/30 12:39:58

1、DHCP简介


动态主机设置协议(英语:Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:用于内部网或网络服务供应商自动分配IP地址;给用户用于内部网管理员作为对所有计算机作中央管理的手段。

DHCP是一个典型的Client/Server模型的协议,使用UDP传输

  • DHCP Server端,使用UDP端口:67
    DHCP Server可以在很多设备上部署,如Cisco、H3C、Juniper、Windows、Linux……都可以

  • DHCP Client端,使用UDP端口:68
    客户端(主机、路由器、交换机、网络打印机、网络摄像头……都可以作为DHCP客户端)

DHCP有三种机制分配IP地址:

  1. 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。

  1. 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。

  1. 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。

2、DHCP状态机


如下图所示是比较常见的DHCP状态机

DHCP的实现分为4步,分别是:

第一步:Client端在局域网内发起一个DHCP Discover包,目的是想发现能够给它提供IP的DHCP Server。

第二步:可用的DHCP Server接收到Discover包之后,通过发送DHCP Offer包给予Client端应答,意在告诉Client端它可以提供IP地址。

第三步:Client端接收到Offer包之后,发送DHCP Request包请求分配IP。

第四步:DHCP Server发送ACK数据包,确认信息。

第五步:重新请求获取

第六步:重新发送ack包,确认信息

3、wireshake抓包分析


正常来说,一次DHCP过程只需要上面状态机的前四步,后面的续约是在DHCP的租期到达1/2和7/8的时候进行的。

打开任意一个数据包,我们可以看到wireshark已经把里面的数据分层显示。

从上到下依次为物理层、数据链路层、网络层、传输层和应用层。

tcpdump抓包命令:

tcpdump -i eth0 -c 8 -s 0 -w /mnt/sdcard/dhcp.pcap ‘udp and port 67 and port 68’ &

-i 选择网卡

-c 数据包个数

-s 数据包长度,默认只抓包头,0代表完整数据包

-w 写入文件

udp and port 67 and port 68:dhcp报文的过滤条件,udp协议,端口67和68

&使进程后台运行

3.1 发现阶段——DHCP Discover(广播)


3.1.1 DHCP Discover 理论分析

DHCP Discover(广播)是第一个阶段即DHCP客户端寻找DHCP服务端的阶段。

由于DHCP服务端的IP地址等信息对于DHCP客户端来说是未知,此时就需要使用广播的方式进行发送消息,基于UDP的源端口号68,目的端口号67来发送DHCP Discover发现信息来寻找DHCP服务器。

由于是广播包,在同一个广播域中的每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

在二层中,广播地址是12个f即ff:ff:ff:ff:ff:ff
在三层中,广播地址是4个255(IPv4)即255.255.255.255
换算成二进制,即全为1。

3.1.2 DHCP Discover 物理层

物理层给出的有用信息并不多,但是我们能够看到网卡相关信息和这个是DHCP的数据包且使用了UDP协议。

3.1.3 DHCP Discover 数据链路层

数据链路层中我们可以看到本机的MAC地址和目标MAC地址(广播)。

3.1.4 DHCP Discover 网络层

网络层的参数较多,我们对其进行一一解析:

  • 版本(Version):4,表明这里使用IPv4

  • 头部长度(Header Length):20 bytes,即20个字节

  • 区分服务字段(Differentiated Services Field):0x00,十六进制,换算成二进制正好是下面的8个0,表明当前的IP数据报中没有使用服务类型字段,采用默认的“尽力传输”优先级别

  • 总长度(Total Lenth):328,表明该数据报的总长度是328个字节

  • 标识(Identification):0xe752,十六进制,换算成十进制正好是括号中的59218,表明该数据报的标识为0xe752

  • 分段标识(Flags):
    保留位(Reserved bit)为0,Don’t fragment为0表示该数据报可以被分段,More fragments为0表明后面没有分段

  • 分段偏移(Fragment offset):0,表明没有被分段

  • 生存时间(Time to live):128,表明该数据报最多可以经过128个路由

  • 上层协议(Protocol): UDP,值为17

  • 头部校验(Header checksum): validation disabled,表示没有进行校验

  • 校验状态(Header checksum status):Unverified,同上,没有进行校验

  • 源IP地址(Source):0.0.0.0,表明当前尚未获得DHCP服务端分配的IP地址,只能使用0.0.0.0

  • 目标IP地址(Destination):255.255.255.255,广播IP地址,对同一广播域内的所有TCP/IP协议客户端进行广播

3.1.5 DHCP Discover 传输层

传输层这里可以看到源端口为68,目的端口为67,且校验状态为未校验。

2.1.6 DHCP Discover 应用层

应用层的报文也有很多重要数据,我们截取重要的进行分析。

  • Bootp flags:0表示单播,1表示广播,这里为0,即DHCP服务端回复的DHCP Offer报文应为单播形式

部分书上讲述的DHCP四个包都是使用广播的方式进行,实际上DHCP Offer和DHCP Ack这两个数据包是广播还是单播是由DHCP的客户端发送的数据包来决定的。
  • Ciaddr即客户端IP地址(Client IP address)、

Yiaddr即被分配的DHCP客户端IP地址( Your(client) IP address)、

Siaddr即下一个为DHCP客户端分配IP地址的DHCP服务器地址(Next server IP address )、

Giaddr即DHCP中继IP地址(Relay agent IP address)、

这四个IP地址均为0.0.0.0,因为此时还处于DHCP的发现阶段,DHCP客户端对这些信息还是一无所知。

  • 我们还可以看到请求信息里面需要请求获取包括子网掩码(Subnet Mask)、路由网关(Router)、 DNS服务器(Domain Name Server) 、以及域名(Domain Name)等信息

3.2 提供阶段——DHCP Offer(单播/广播)


3.2.1 DHCP Offer 理论分析

提供阶段,即DHCP服务器向DHCP客户端提供预分配IP地址的阶段。网络中的所有DHCP服务器接收到客户端的DHCP Discover报文后都会根据自己的DHCP地址池中IP地址分配的优先次序选出一个IP地址,然后与其他参数一起通过传输层的UDP67号端口在DHCP Offer报文中以单播/广播方式发送给客户端的UDP68号端口。

DHCP服务器在分配这个地址之间会ping一下这个分配的ip地址,如果没有Response就才会预分配这个地址

客户端通过封装在帧中的目的MAC地址(也就是DHCP Discover报文中的CHADDR字段值)的比对来确定是否接收该帧。但这样以来,理论上DHCP客户端可能会收到多个DHCP Offer报文(当网络中存在多个DHCP服务器时),但DHCP客户端只接收第一个到来的DHCP Offer报文。

3.2.2 DHCP Offer 数据链路层

这时可以看到根据之前的DHCP报文,这里使用了单播的形式。而源MAC地址就是DHCP服务器的MAC地址且目的MAC地址是之前发送DHCP Discover报文的客户端MAC地址。

3.2.3 DHCP Offer 网络层

网络层报文中我们可以看到这时候目的IP地址和源IP地址都已经有了数据,10.22.25.118就是即将要分配的IP地址,而10.22.25.254就是DHCP服务器的地址又或者是DHCP中继代理服务器的IP地址,具体要看应用层的报文。

通过DHCP中继代理服务,与DHCP服务器不在同一子网的DHCP客户端可以通过DHCP中继代理(通常是路由器或三层交换机设备开启DHCP中继功能)与位于其他网段的DHCP服务器通信,最终是DHCP客户端获取到从DHCP服务器上分配而来的IP地址。
此时的DHCP中继代理就位于DHCP客户端和DHCP服务器之间,负责广播DHCP报文的转发。

3.2.4 DHCP Offer 应用层

这个时候我们再看应用层的报文:

  • Ciaddr即客户端IP地址(Client IP address):此时还没有分配,所以还是0.0.0.0

  • Yiaddr即被分配的DHCP客户端IP地址( Your(client) IP address):10.22.25.118,这个IP即将分配给该客户端

  • Siaddr即下一个为DHCP客户端分配IP地址的DHCP服务器地址(Next server IP address ):192.168.112.240,这个是分配IP地址的DHCP服务器

  • Giaddr即DHCP中继IP地址(Relay agent IP address):10.22.25.254,这个是DHCP的中继代理服务器的IP地址,在这里应该是一个开启了DHCP中继的三层交换机

  • 子网掩码(Subnet Mask)、路由网关(Router)、 DNS服务器(Domain Name Server) 、以及域名(Domain Name)等信息均已经包含在里面

  • 租约时间是需要注意的一个问题,这里我们可以看到DHCP租约时间(IP Address Lease Time)实际上是8天,单位是s,wieshark换算成了天方便我们查看

  • 而Renewal Time Value就是初次续约的时间,这个时间是租约时间的1/2,这里就是4天,这个时候一般客户端会以单播的方式向DHCP服务器发送报文请求续约

  • 而Rebinding Time Value就是第二次续约时间,这个时间是租约时间的7/8,这里也就是7天,只有在初次续约失败之后,才会在这个时间以广播的方式向网络中的DHCP服务器再次申请IP地址

3.3 选择阶段——DHCP Request(广播)


2.3.1 DHCP Request 理论分析

选择阶段,即DHCP客户端选择IP地址的阶段。

如果有多台DHCP服务器向该客户端发来DHCPOFFER报文,客户端只接收第一个收到的DHCP Offer报文,然后以广播方式发送DHCP Request报文。在该报文的Requested Address选项中包含DHCP服务器在DHCP Offer报文中预分配的IP地址、对应的DHCP服务器IP地址等。

这样也就相当于同时告诉其他DHCP服务器,它们可以释放已提供的地址并将这些地址返回到可用的地址池中。

在DHCP REQUEST报文封装的IP协议头部中,客户端的Source Address仍然是0.0.0.0,数据包的Destination仍然是255.255.255.255。但在DHCP Request报文中Ciaddr、Yiaddr、Siaddr、Giaddr 字段的地址均为0.0.0.0

3.3.2 DHCP Request 数据链路层

这时候又变回了广播。

3.3.3 DHCP Request 网络层

由于是广播,所以目标IP地址是255.255.255.255,而源IP地址还是0.0.0.0是因为还没有完成整个DHCP过程,本机尚未获取到IP地址。

3.3.4 DHCP Request 应用层

  • Bootp flags:0表示单播,1表示广播,这里为0,即DHCP服务端回复的报文应为单播形式

  • Ciaddr、Yiaddr、Siaddr、Giaddr 字段的地址均为0.0.0.0

3.4 确认阶段——DHCP Ack(单播/广播)


3.4.1 DHCP Ack 理论分析

确认阶段,即DHCP服务器确认分配级DHCP客户端IP地址的阶段。

某个DHCP服务器在收到DHCP客户端发来的DHCP REOUEST报文后,只有DHCP客户端选择的服务器会进行如下操作:如果确认将地址分配给该客户端,则以单播/广播方式返回DHCP ACK报文;否则返回DHCP NAK报文,表明地址不能分配给该客户端。

3.4.2 DHCP Ack 数据链路层

可以看到这里是单播,源MAC地址是DHCP服务器(此处为中继代理)的MAC地址,目标MAC地址是DHCP客户端的MAC地址。

3.4.3 DHCP Ack 网络层

10.22.25.118就是即将要分配的IP地址,而10.22.25.254就是DHCP服务器的地址(此处为DHCP中继代理服务器)

3.4.4 DHCP Ack 应用层

在DHCPACK报文中Yiaddr字段包含要分配给客户端的IP地址,而Chaddr和DHCP:Client Identifier字段是发出请求的客户端中网卡的MAC地址。

同时,在选项部分也会把在DHCPOFFER报文中所分配的IP地址的子网掩码、默认网关、DNS服务器、租约期、续约时间等信息加上。

4、DHCP的IP地址租约更新


3.1 DHCP服务IP地址租约更新原理


如果采用动态IP地址分配策略,则DHCP服务器分配给客户端的IP地址都是有一定租约期限的,当租约期满后DHCP服务器又会收回原来分配的这个IP地址。

如果DHCP客户端希望继续使用该地址,则需要向DHCP服务器提出更新IP地址租约的申请,也就是前面所说到的“续约”。

IP地址租约更新或者IP地址续约也就是更新服务器端对IP地址的租约信息,使其恢复为初始状态。

3.2 申请续约的方法


  1. 在DHCP客户端的IP地址租约期限达到1/2时,由DHCP客户端向为它分配IP地址的DHCP服务器以单播方式发送DHCP REOUEST请求报文,以期进行IP租约的更新。

  1. 如果DHCP服务器同意续约,则DHCP服务器向客户端以单播方式返回DHCP ACK报文,通知DHCP客户端已经获得新IP租约,可以继续使用此IP地址;相反,如果DHCP服务器不同意续约,则DHCP服务器以单播方式返回DHCP NAK报文,通知DHCP客户端不能获得新的租约,此IP地址不可以再分配给该客户端。

  1. 如果上面的续约申请失败,则DHCP客户端还会在租约期限达到7/8时再次以广播方式发送DHCP REQUEST请求报文进行续约。DHCP服务器的处理方式同上,不再赘述。

  1. 如果第二次续约请求还是失败,则原来租约的IP地址将被释放。

4、DHCP中继代理服务


在前面我们已经说过,在DHCP客户端初次从DHCP服务器获取IP地址的过程中,所有从DHCP客户端发出的请求报文均是以广播方式(目的地址为255.255.255.255)进行发送的,所以DHCP服务只适用于DHCP客户端和DHCP服务器处于同一个子网(也就是DHCP服务器至少有一个端口与DHCP客户端所在的子网是直接连接的)的情况,因为广播包是不能穿越子网的。

基于DHCP服务的以上限制,这样一来,如果DHCP客户端与DHCP服务器之间隔了路由器设备,不在同一子网,就不能直接通过这台DHCP服务器获取IP地址,即使DHCP服务器上已配置了对应的地址池。这也就意味着,如果想要让多个子网中的主机进行动态IP地址分配,就需要在网络中的所有子网中都设置一个DHCP服务器。这显然是很不经济的,也是没有必要的。

DHCP中继功能可以很好地解决DHCP服务的以上难题。通过DHCP中继代理服务,与DHCP服务器不在同一子网的DHCP客户端可以通过DHCP中继代理(通常也是由路由器或三层交换机设备担当,但需要开启DHCP中继功能)与位于其他网段的DHCP服务器通信,最终使DHCP客户端获取到从DHCP服务器上分配而来的IP地址。此时的DHCP中继代理就位于DHCP客户端和DHCP服务器之间,负责广播DHCP报文的转发。

从前面的报文分析我们可以轻松的看出10.22.25.118和192.168.112.240是明显不属于同一个子网的,他们之间通信肯定需要使用路由器进行路由,而10.22.25.254就是担任着DHCP中继代理的角色。

至于和DHCP服务器之间经过了多少个路由,我们可以tracert一下。

从图中我们可以看到,从10.22.25.254这个DHCP中继代理到DHCP服务器之间需要经过5个路由节点。

而实际上,在很多的大型园区网络中,都会使用一个DHCP服务器集群+多个DHCP中继代理这样的方式进行DHCP分配。

ref:

https://tinychen.com/20190609-wireshark-dhcp/

https://developer.aliyun.com/article/278172

https://blog.csdn.net/qq_24421591/article/details/50936469

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1完成一个Vue后台管理项目(十五、作业列表、表格数据方法的封装)

往期 从0到1完成一个Vue后台管理项目(一、创建项目) 从0到1完成一个Vue后台管理项目(二、使用element-ui) 从0到1完成一个Vue后台管理项目(三、使用SCSS/LESS,安装图标库) 从0到1完成一个Vu…

解决虚拟机安装 VMware Tools 灰色无法点击问题

环境: 主机 OS: Windows 11 虚拟机平台: VMware Workstation 17 Pro 虚拟系统: Ubuntu 22.04 1. 问题 安装好 Linux 系统后,想要适配桌面大小等其它功能就需要安装 VMware Tools 这个工具,最简单的办法就是通过虚拟机平台的 “一键安装”&a…

Java之ATM系统

目录项目介绍系统准备,首页设计总结开户功能总结用户登录总结用户操作页设计、查询账户、退出账户功能用户存钱取款功能转账功能密码修改、销户源代码项目介绍 系统准备,首页设计 总结 1、用户的账户信息,系统如何表示的? 定义账户类Accoun…

【CVHub】现代目标检测故事 | 40+目标检测网络架构大盘点!从基础架构ResNet到最强检测器Yolov7再到最新部署神器GhostNetV2

本文来源“CVHub”公众号,侵权删,干货满满。 作者丨派派星 来源丨CVHub 原文链接:现代目标检测故事 | 40种网络架构大盘点!从基础架构ResNet到最强检测器Yolov7再到最新部署神器GhostNetV2 导读 目标检测是指在图像或视频中分…

PHY6230 高性价比低功耗高性能 集成32-bit MCU BLE5.2+2.4G芯片

PHY6230 是一款高性价比低功耗高性能Bluetooth LE 5.2系统级芯片,集成32-bit高性能低功耗MCU,16KB OTP,8KB Retention SRAM和64KB ROM,可选EEPROM。内置高性能多模射频收发机最大发射功率10dBm,BLE 1Mbps速率下接收灵敏…

快手发布2022直播生态报告,运营人速览

1、快手电商推出2023年直播间联合补贴活动1月5日,快手电商推出2023年直播间联合补贴活动。该活动主要目的是助力主播完成更高销售额,报名成功后,平台将对直播间内的一部分活跃用户发放10%-16%折扣率的满减优惠券,成本由平台和主播…

【BUG解决方案】jQuery数组中包含数据,但通过 .length 获得的数组长度始终为0

0. BUG展示 var lels []; for (var i 0; i < maxDevNums 1; i) {lels.push([]); } $.ajax({type : "post",async : true,url : "/sc/comb/history/data",data : {},dataType : "json",success : function (result) {if (result) {for (le…

FFmpeg 集成 x265 编译及解码

x265 是一个免费的软件库和应用程序&#xff0c;用于将视频流编码为 H.265/MPEG-H HEVC 压缩格式&#xff0c;并在 GNU GPL 条款下发布。 FFmpeg 为了支持 H.265 编、解码可以集成 x265 编译&#xff0c;在编译 FFmpeg 之前需要先编译 x265&#xff0c;但并不是所有的版本都能…

Python一轮知识拾遗

目录 字符串格式化 %格式符 format字符串格式化 三元条件运算符 可迭代对象 break和continue语句 enumerate函数 序列封包 序列解包 部分序列解包 append.列表和extend.列表的区别 字符串格式化 通过字符串的格式化&#xff0c;可以输出特定格式的字符串。 (1) 格式化…

为什么要申报绿色工厂?

一、什么是绿色工厂&#xff1f; 绿色工厂是指实现了用地集约化、生产洁净化、废物资源化、能源低碳化的工厂。 二、为什么要申报绿色工厂&#xff1f; 1、政策导向&#xff0c;发展趋势 发展绿色工厂是顺应全球绿色发展的大趋势&#xff0c;符合国家政策导向。 2、荣誉称号…

[笔记]Windows Cyswin ssh配置及远程控制

文章目录前言一、配置1.1 安装 Cygwin1.2 Cygwin安装时搜索安装ssh1.3 添加cygwin安装目录至Path环境变量1.4 配置 SSHD 服务1.5 添加 sshd连接账号二、使用2.1 使用配置的连接账号进行登录2.2 连接远程主机三、常见问题3.1 ssh on cygwin和openssh 冲突 提示 Host key verific…

新增血缘关系功能,色彩地图支持标记功能,DataEase开源数据可视化分析平台v1.18.0发布

2023年1月9日&#xff0c;DataEase开源数据可视化分析平台正式发布v1.18.0版本。 这一版本的功能升级包括&#xff1a;数据集方面&#xff0c;定时任务采用分页的方式拉取数据&#xff0c;减少资源消耗&#xff1b;仪表板方面&#xff0c;新增仪表板主题&#xff0c;以满足不同…

二叉平衡树之二叉树搜索树【咱们一起手动模拟实现】

目录 1、什么是二叉搜索树&#xff1f; 2、手动模拟二叉搜索树 2.1、整体代码 2.2、查找数据 2.3、插入数据 2.4、删除数据 3、性能分析 1、什么是二叉搜索树&#xff1f; 二叉搜索树也叫作二叉排序树&#xff0c;可以使一颗空树&#xff0c;也可以是具有以下性质的二…

JavaScript 高级 内存管理和闭包

这里写目录标题1. JavaScript内存管理2. 垃圾回收机制算法1. 引用计数算法2. 标记清除算法3. 闭包的概念理解4. 内存泄露5. 面试题1. JavaScript内存管理 不管什么样的编程语言&#xff0c;在代码的执行过程中都是需要给它分配内存的&#xff0c;不同的是某些编程语言需要我们…

基于融合C3SE+YOLOv5s的高精度二维码检测识别分析系统

在前面的系列博文中&#xff0c;我们尝试了在不同款的yolov5模型中加入不同的注意力机制来提升模型的性能&#xff0c;都有不错的表现效果&#xff0c;本文主要的目的是尝试将注意力机制融合集成进入原生的C3模块中来替换原生的C3模块来对比分析模型的检测性能&#xff0c;首先…

【精华】JVM调优学习

JVM 介绍 1. 什么是 JVM JVM 是 Java Virtual Machine&#xff08;Java 虚拟机&#xff09;的缩写。一台执行 Java 程序的机器。 2 .JAVA 语言的执行原理 计算机语言&#xff1a; 计算机能够直接执行的指令。这种指令和系统及硬件有关。 计算机高级语言&#xff1a; 在遵循…

模块化建筑全球市场分析

模块化市场分析 市场摘要 全球模块化建筑市场&#xff0c;预计从2019年的1199亿6千万美元&#xff0c;到2027年的1916亿2千万&#xff0c;以6.4%的年复合成长率成长。人口增加&#xff0c;快速城市化和基础设施发展投资增加是预测期内刺激市场增长的关键因素。模块化施工是最可…

【C进阶】第十三篇——指针详解

指针的基本概念 指针类型的参数和返回值 指针与数组 指针与const限定符 指针与结构体 指向指针的指针与指针数组 指向数组的指针与多维数组 函数类型和函数指针类型 不完全类型和复杂声明 指针的基本概念 堆栈有栈顶指针&#xff0c;队列有头指针和尾指针&#xff0c;…

C++ 图进阶系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径求解算法

1. 前言 因无向、无加权图的任意顶点之间的最短路径由顶点之间的边数决定&#xff0c;可以直接使用原始定义的广度优先搜索算法查找。 但是&#xff0c;无论是有向、还是无向&#xff0c;只要是加权图&#xff0c;最短路径长度的定义是&#xff1a;起点到终点之间所有路径中权…

第五十讲:神州路由器IPv6隧道的配置

目前IPv6隧道技术有ISATAP隧道、6to4隧道、IPv6 over MPL隧道等。 任务一&#xff1a;配置ISATAP隧道 实验拓扑图如下所示 配置要求&#xff1a;两台路由器ROUTERA和ROUTERB通过IPv4网络连接&#xff0c;要求在两台路由器上分别配置ISATAP隧道&#xff0c;实现两端IPv6主机PC…