DHCP详解_根据抓包分析带宽-程序员宅基地

技术标签: DHCP  network  

DHCP,DNS和HTTP是3种常见的高层协议。

一,动态主机配置协议DHCP

1,DHCP简介

DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。

DHCP的前身是BOOTP协议(Bootstrap Protocol),BOOTP被创建出来为连接到网络中的设备自动分配地址,后来被DHCP取代了,DHCP比BOOTP更加复杂,功能更强大。后面可以看到,在用Wireshark过滤显示DHCP包,需要输入过滤条件BOOTP,而不是DHCP,但或许是因为我使用的Wireshark版本是比较旧的1.12.9,没有在新版本中尝试过,也许可以输入DHCP让其只显示DHCP包。

2,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数据包,确认信息。


二,利用Wireshark抓取DHCP包

1,分析

要想抓取到DHCP包,先要保证有可用的DHCP服务器,然后将主机IP地址获取方式设置为自动获取。如果主机在抓包之前已经联网,需要先断开主机的网络连接,然后再连接网络。在cmd下使用命令ipconfig来完成网络断开与连接的过程:

<code class="hljs dos has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> <span class="hljs-winutils" style="color: rgb(0, 0, 136); box-sizing: border-box;">ipconfig</span> /release 断开主机当前的网络连接 <span class="hljs-winutils" style="color: rgb(0, 0, 136); box-sizing: border-box;">ipconfig</span> /renew 请求连接网络 </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

在cmd中可以使用ipconfig /?查看各参数的含义: 
这里写图片描述 
(1)ipconfig /release 
断开当前的网络连接,主机IP变为0.0.0.0,主机与网络断开,不能访问网络。 
(2)ipconfig /renew 
更新适配器信息,请求连接网络,这条命令结束之后,主机会获得一个可用的IP,再次接入网络。

2,开始抓包

实验环境:Win10,Wireshark1.12.9,有线连接 
(1)在Wireshark中点击start开始抓包,在过滤栏输入bootp,使其只显示DHCP数据包。 
(2)在cmd中输入ipconfig /release 断开网络连接。 
这里写图片描述 
可以看到此时所有的网卡都已经断开。以太网处于断开状态。

这里写图片描述
Wireshark中截获到一个DHCP Release数据包。

(3)在cmd中输入ipconfig /renew 请求网络连接。 
这里写图片描述
此时,可以看到在Wireshark中新增了4个DHCP数据包: 
数据包1:DHCP Discover 
数据包2:DHCP Offer 
数据包3:DHCP Request 
数据包4:DHCP ACK

这里写图片描述 
等待这条命令执行完毕之后,在cmd中可以看到主机被分配了IP,主机成功连入网络中。

(4)为了后续分析使用,我们再执行一次ipconfig /renew: 
这里写图片描述
可以看到Wireshark中新增了3个数据包:DHCP ACK;DHCP Request;DHCP ACk。 
如果再次使用ipconfig /renew,每执行一次会新增2个数据包:DHCP Request;DHCP ACk。

三,DHCP包分析

下面着重来分析当执行,ipconfig /renew这条命令产生的4个DHCP数据包,这4个数据包代表了客户机和DHCP服务器的交互过程,也是IP动态分配的过程。 
这里写图片描述 
1,DHCP Discover数据包 
(1)Client端使用IP地址0.0.0.0发送了一个广播包,可以看到此时的目的IP为255.255.255.255。Client想通过这个数据包发现可以给它提供服务的DHCP服务器。

(2)从下图可以看出,DHCP属于应用层协议,它在传输层使用UDP协议,目的端口是67。 
这里写图片描述

2,DHCP Offer包 
当DHCP服务器收到一条DHCP Discover数据包时,用一个DHCP Offerr包给予客户端响应。 
这里写图片描述 
(1)DHCP服务器仍然使用广播地址作为目的地址,因为此时请求分配IP的Client并没有自己ip,而可能有多个Client在使用0.0.0.0这个IP作为源IP向DHCP服务器发出IP分配请求,DHCP也不能使用0.0.0.0这个IP作为目的IP地址,于是依然采用广播的方式,告诉正在请求的Client们,这是一台可以使用的DHCP服务器。

(2)DHCP服务器提供了一个可用的IP,在数据包的Your (client) IP Address字段可以看到DHCP服务器提供的可用IP。

(3)除此之外,如图中红色矩形框的内容所示,服务器还发送了子网掩码,路由器,DNS,域名,IP地址租用期等信息。

3,DHCP Request包 
当Client收到了DHCP Offer包以后(如果有多个可用的DHCP服务器,那么可能会收到多个DHCP Offer包),确认有可以和它交互的DHCP服务器存在,于是Client发送Request数据包,请求分配IP。 
此时的源IP和目的IP依然是0.0.0.0和255.255.255.255。

4,DHCP ACK包 
服务器用DHCP ACK包对DHCP请求进行响应。 
这里写图片描述 
在数据包中包含以下信息,表示将这些资源信息分配给Client. 
Your(client) IP address:分配给Client的可用IP。 
后面有许多项option信息,前两项是DHCP服务器发送的消息类型(ACK)和服务器的身份标识,后面几项是: 
Subnet Mask:Client端分配到的IP的子网掩码; 
Router:路由器 
Domain Name Server:DNS,域名服务器 
Domain Name:域名 
IP Address Lease Time:IP租用期。


四,DHCP starvation attack

1,DHCP starvation attack,DHCP饥饿攻击 
其实各种各样的攻击技术总是会让人觉得兴奋。抛却道德不谈,必须承认的是,制造这些攻击的人都是高智商。

有许多中攻击DHCP的技术,这里介绍其中一种,有点类似于SYN 洪范攻击。 
DHCP starvation attack,中文即DHCP饥饿攻击,可以顾名思义一下,饥饿攻击,就是大量地进食,把可以吃的食物全部吃完,然后让其他人没得吃,最后给其他人提供一些毒药,把人家毒死,姑且可以这样浅显地认为。

下面来说这种攻击是如何实现的。一些不法分子,伪造合法的MAC地址,不断地向DHCP服务器发出DHCP Request包,最后耗尽服务器的可用IP,于是原有的这台DHCP服务器便不能够给客户端分配IP了,此时不法分子再伪造一台DHCP服务器,给客户端分配IP,将客户端的默认网关和DNS都设置成自己的机器,于是便可以对客户端进行中间人攻击。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jisuanji198509/article/details/79956728

智能推荐

Trias技术丨通过去中心化信任根dRoT可以在程序间高效地建立信任关系_trias 可信计算-程序员宅基地

文章浏览阅读576次。12月14日,Trias创始人阮安邦博士受邀出席第21届国际信息与通信安全会议(ICICS 2019),并做了题为「去中心化信任根:用可信计算与区块链技术构建互联网可信计算基础设施」的分享。该主题得到了与会嘉宾的好评和关注,在此次大会上,除了Trias之外,来自阿里巴巴、微软、AWS、360等多位企业代表也进行了相关技术的主题分享。阮博士在演讲中表示,「去中心化信任根..._trias 可信计算

kafka启用SASL/PLAIN+ACL后,kafka-consumer-group.sh查看消费组报错_executing consumer group command failed due to req-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏2次。kafka启用SASL/PLAIN+ACL后,kafka-consumer-group.sh查看消费组报错问题kafka启用用户认证和权限管理(SASL/PLAIN+ACL)之后,kafka-consumer-group.sh 查看消费组会报错-bash-4.2$cd $KAFKA_HOME-bash-4.2$bin/kafka-consumer-groups.sh --new-consu..._executing consumer group command failed due to request metadata failed on brokers lis

cmake编译时,设置ANDROID_PLATFORM版本不起效_dandroid_platform-程序员宅基地

文章浏览阅读4.7k次。cmake编译时,设置ANDROID_PLATFORM版本不起效。在CMakeLists.txt里我的设置是:add_definitions(-DANDROID_PLATFORM=android-18)但是AS最终生成的build_command.txt中仍旧是:​​​​​​​-DANDROID_PLATFORM=android-21查看其它资料时发现,可以在build.gradle中设置:android { ... defaultConfig {._dandroid_platform

使用Matlab的appdesigner创建一个简单的图像处理app_用matlab做一个图像处理的app-程序员宅基地

文章浏览阅读5.7k次,点赞15次,收藏85次。利用matlab的appdesigner建造一个简单的图像处理app_用matlab做一个图像处理的app

新手开始记录博客生涯,用C#写个简单的计时器在textbox中显示计时时间。_asp.net(c#)中textbox开始时间和结束时间-程序员宅基地

文章浏览阅读937次,点赞4次,收藏4次。新手C#小白,想在textbox中实现自动计时功能,百度了一下午,要么看不明白,要么太复杂。于是就自己随便弄了下,虽然不是很好,但基本实现功能。首先拖入timer和textbox控件:![timer](https://img-blog.csdnimg.cn/20200819170321144.PNG#pic_center)接下来设置timer的事件最后直接贴代码 int hour; int minute; int second; p_asp.net(c#)中textbox开始时间和结束时间

用JAVA和C++ 画心_system.out画心-程序员宅基地

文章浏览阅读4.4k次。心形线 心形线,是一个圆上的固定一点在它绕着与其相切且半径相同的另外一个圆周滚动时所形成的轨迹,因其形状像心形而得名。 心脏线亦为蚶线的一种。在曼德博集合正中间的图形便是一个心脏线。心脏线的英文名称“Cardioid”是 de Castillon 在1741年的《Philosophical Transactions of the Royal Society》发表的;意为“像心脏..._system.out画心

随便推点

微信WEB开发者工具-X5 Blink 内核调试_inspect白屏-程序员宅基地

文章浏览阅读1.2w次。微信WEB开发者工具-X5 Blink 内核调试_inspect白屏一、微信web开发者工具官方使用及下载说明:https://mp.weixin.qq.com/wiki/10/e5f772f4521da17fa0d7304f68b97d7e.html二、X5 Blink 内核调试的具体步骤: 官方说明:https://mp.weixin.qq.com/wiki?t=r_x5 blink

数据仓库面试题整理超详细_数仓面试-程序员宅基地

文章浏览阅读7.4k次,点赞12次,收藏155次。[数据仓库](https://so.csdn.net/so/search?q=数据仓库&spm=1001.2101.3001.7020)的定义?首先,用于支持决策,面向分析型数据处理;其次,对多个异构的数据源有效集成,集成后按照主题进行重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。_数仓面试

MATLAB的save用法_matlab save-程序员宅基地

文章浏览阅读6.8w次,点赞33次,收藏154次。save将工作区变量保存到文件中语法save(filename)save(filename,variables)save(filename,variables,fmt)save(filename,variables,version)save(filename,variables,version,'-nocompression')save(filename,va..._matlab save

【优化算法】符号LMS算法【含Matlab源码 697期】-程序员宅基地

文章浏览阅读2.4k次,点赞6次,收藏34次。最小均方(LMS, Least Mean Squares)是最基本的自适应滤波算法。LMS算法是自适应滤波器中常用的一种算法与维纳算法不同的是其系统的系数随输入序列而改变。维纳算法中截取输入序列自相关函数的一段构造系统的最佳系数。而LMS算法则是对初始化的滤波器系数依据最小均方误差准则进行不断修正来实现的。因此理论上讲LMS算法的性能在同等条件下要优于维纳。_符号lms算法

VTK学习笔记(十六)vtkImageReslice 与 vtkExtractVOI_vtkcommand::leftbuttonpressevent-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏9次。VTK学习笔记(十六)vtkImageReslice1、关键代码:2、完整代码:3、CMakeLists.txt1、关键代码:先通过vtkMetaImageReader读取一副三维图像,获取图像范围、原点和像素间隔,由这三个参数可以计算图像的中心位置。接下来定义了切面的变换矩阵axialElements,该矩阵的前三列分别表示X、Y和Z方向矢量,第四列为切面坐标系原点。通过修改切面坐标系原点,可以得到不同位置的切面图像。然后将读取的图像作为vtkImageReslice的输入,通过函数SetResl_vtkcommand::leftbuttonpressevent

linux jobs继续运行,Linux jobs等前后台运行命令详解-程序员宅基地

文章浏览阅读393次。A,Shell支持作用控制,有以下命令:1. command& 让进程在后台运行2. jobs 查看后台运行的进程3. fg %n 让后台运行的进程n到前台来4. bg %n 让进程n到后台去;PS:"n"为jobs查看到的进程编号.B. 命令详解fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一。&..._jobs怎么调到台前运行

推荐文章

热门文章

相关标签