一,动态主机配置协议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都设置成自己的机器,于是便可以对客户端进行中间人攻击。

网络协议篇之DHCP协议(一)—— DHCP协议基础相关推荐

  1. [ 网络协议篇 ] 一篇文章让你掌握神秘的 DHCP(二)

    [ 网络协议篇 ] 一篇文章让你掌握神秘的 DHCP(一) [ 网络协议篇 ] 一篇文章让你掌握神秘的 DHCP(二) 上篇回顾: 详细介绍了DHCP的基本概念,作用,报文类型,报文格式,端口,角色等 ...

  2. [ 网络协议篇 ] 一篇文章让你掌握神秘的 DHCP(一)

    [ 网络协议篇 ] 一篇文章让你掌握神秘的 DHCP(一) [ 网络协议篇 ] 一篇文章让你掌握神秘的 DHCP(二) 本篇文章稍微有点长,但相信你一定不会后悔读这篇文章 DHCP的内容还没有讲完,如 ...

  3. 【计算机网络】——通信协议综述(网络协议、网络分层、ifconfige命令行、DHCP与PXE)

    一.为什么学习网络协议 协议三要素: 人类和计算机之间需要沟通的协议,只有通过这种协议,计算机才知道我们想让它做什么. 可以看得出,计算机语言作为程序员控制一台计算机工作的协议,具备了协议的三要素. ...

  4. Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述

    Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述 网络协议是用于不同计算机之间进行网络通信的.网络协议是网络上所有设备(如网络服务器.计算机.交换机.路由器等)之间通信规则的集合,它 ...

  5. Wireshark数据抓包分析——网络协议篇

    Wireshark数据抓包分析--网络协议篇 Wireshark是目前最受欢迎的抓包工具.它可以运行在Windows.Linux及MAC OS X操作系统中,并提供了友好的图形界面.同时,Wiresh ...

  6. 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)

    涤生_Woo 2017年11月11日阅读 15544 关注 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二) 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机 ...

  7. [ 网络协议篇 ] 一篇文章让你掌握神秘的 ACL

    [ 网络模型篇 ]大白话告诉你什么是OSI七层模型 [ 网络协议篇 ] 一篇文章让你掌握神秘的 ACL [ 网络协议篇 ] 一篇文章让你掌握神秘的 NAT [ 网络协议篇 ] 一篇文章让你掌握神秘的 ...

  8. dhcp动态主机配置协议

    dhcp简介:         动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,计算机网络应用层协议. ...

  9. OpenWrt之DHCP(动态主机配置协议)

    OpenWrt之DHCP(动态主机配置协议) DHCP简介 在TCP/IP网络上,每台主机在访问网络及其资源之前,都必须进行基本的网络信息配置,包含IP地址.子网掩码.默认网关和DNS等.在大型网络中 ...

最新文章

  1. Java面向对象part1
  2. vscode配置浏览器
  3. Linux的secureCRT设置字体大小
  4. 用Unity3D实现简单的牧师与魔鬼游戏
  5. MVC RC2中关于HtmlHelper给DropDownList设置初始选中值的问题
  6. 分数的乘法逆元和负数的取模运算
  7. USACO12FEB Nearby Cows
  8. Extjs4快速上手四——实现菜单
  9. 关于Parse库的配置问题
  10. 关于JavaScript中return的使用情况
  11. 公交驾校自动约车脚本
  12. 基于java象棋游戏_基于JAVA技术的中国象棋游戏设计与实现
  13. 计算机自我鉴定范文7月,学员自我鉴定表7篇
  14. pro android python with sl4a,Pro Android Python with SL4A
  15. USB虚拟串口(CDC)极限速度测试
  16. 私域流量社群公司团队管理KPI考核运营方案制度
  17. EIGRP(Enhanced Interior Gateway Routing Protocol,增加型内部网关路由协议)
  18. linux系统工程师面试题答案整理
  19. The Things Network LoRaWAN Stack V3 学习笔记 2.7.1 Web 前端开发调试
  20. Linux 安装node.js 16

热门文章

  1. 宇宙最强vscode教程
  2. StoryBoard 创建tabBarController
  3. 加密狗android,Android系统加密狗的设计与实现
  4. curl:Failed connect to github-production-release-asset-2e65be.s3...; Connection refused解决办法
  5. 计算机网络技术专业学生自我介绍,计算机网络专业大学生面试自我介绍范文
  6. Unity对于手柄的支持
  7. 常用数据结构和算法总结
  8. ubuntu 系统磁盘清理
  9. DaisyDisk for mac(磁盘清理软件)中文版
  10. python package什么意思_Python模块、包(Package)概念与用法分析