43-DHCP协议抓包实验

DHCP数据报格式

   在做实验前,先来了解下DHCP数据报格式中一些常用的一些字段值,另外,DHCP协议使用了BOOTP数据报格式,但修改了一些字段的内容和含义,因为这些字段值比较多,所以大家在看的时候不需要去记,只需要了解,有个印象就行,等需要具体分析某些字段的时候再去查就行了(因为我自己也记不住~),下面来介绍DHCP协议的一些字段。

这里写图片描述
图1- DHCP数据报通用格式(图片来自tcp/ip详解卷一)

操作码字段:表示当前报文是客户端的请求还是服务器的应答,如果op = 1则表示客户端的请求,op = 2表示服务器的应答。

硬件类型字段:表示客户端的网络硬件地址类型,如果htype = 1说明客户端的网络硬件地址类型是以太网类型。

硬件地址长度字段:表示客户端的网络硬件地址长度,hlen = 6说明客户端的网络硬件地址长度是6字节(通常是指mac地址)

跳数字段:表示当前DHCP报头经过的DHCP RELAY的数目,有点类似于IP首部中的TTL字段,但含义又不同,client或server发出DHCP报文时,此字段都初始化为0,每经过一个DHCP RELAY,此字段都会加1,也就是说,这个字段是用于限制DHCP报文不要经过太多DHCP RELAY,因为协议规定:当hops大于4(现在有规定为16)时,这个DHCP报文就会被丢弃。

事务id字段:表示client每次发送DHCP请求报文时产生的随机数,用于匹配server的响应报文,不匹配的server的响应报文会被丢弃。

秒数字段:用来表示client开始DHCP请求后的等待的时间,该字段一般用于在DHCP Server在繁忙时,优先处理等待时间过长的DHCP请求。

标志字段:该字段占用2字节,最左边bit位如果为1表示 server 将以广播方式传送封包给 client ,其余尚未使用。

客户ip地址字段:表示client自己的ip地址,可以是server分配给client的ip地址,也可以是clien已有的ip地址。server会通过单播包将响应包发送给client。

你的ip地址字段:表示server分配给client的ip地址,当DHCP Server相应client的DHCP请求时,会将分配给client的ip地址填入此字段

服务器ip地址字段:表示client获取启动配置信息的服务器ip地址。

网关ip地址字段:若需跨网域进行 DHCP 发放时,由DHCP 中继器在转发DHCP报文的时候填入。

客户主机硬件地址字段:当client发出DHCP请求报文时,将自己的网卡硬件地址(mac地址)填入此字段,DHCP Server一般会将此字段来唯一标识一个client。

服务器主机名字段:记录client获取启动配置信息的服务器名字,此字段由DHCP Server填写(这是一个可选字段)。

启动文件名字段:用于记录client的启动配置文件名字,此字段由DHCP Server填写(这是一个可选字段)。

选项字段:在选项中包含了大量可选的终端初始配置信息和网络配置信息,如终端的域名信息,默认网关ip地址,DNS服务器的ip地址,用户使用ip地址的有效租期等等信息,换句话说,DHCP协议就是通过选项字段给client提供大量的信息内容。

在选项字段中还有一个非常重要的一个字段:server identifier,它标识了server的ip地址,并把它发送给client

DHCP在网络中封装格式

下面一个DHCP请求数据报格式,我们来看一下它的字段含义。
这里写图片描述

Bootstrap Protocol (Request)
    Message type: Boot Request (1)                      // 当前报文是客户端的请求
    Hardware type: Ethernet (0x01)                      // htype = 1说明客户端的网络硬件地址类型是以太网类型
    Hardware address length: 6                          // hlen = 6说明客户端的网络硬件地址长度是6字节(通常是指mac地址)
    Hops: 0                                         // 当前DHCP报头经过的DHCP RELAY的数目为0
    Transaction ID: 0x5e9f2262                          //DHCP请求报文中用于匹配DHCP响应报文的事务id
    Seconds elapsed: 0                                  //DHCP请求后的等待的时间
    Bootp flags: 0x0000 (Unicast)                           
        0... .... .... .... = Broadcast flag: Unicast               //标志字段,因为这是一个client的DHCP请求,所以最左边bit位为0
        .000 0000 0000 0000 = Reserved flags: 0x0000        //还没使用
    Client IP address: 0.0.0.0                              //表示client自己的ip地址,以0填充
    Your (client) IP address: 0.0.0.0                       //表示server分配给client的ip地址,因为这是一个client的DHCP请求,所以暂时以0填充
    Next server IP address: 0.0.0.0                     //下一个DHCP服务器ip地址,因为这是一个client的DHCP请求,所以暂时以0填充
    Relay agent IP address: 0.0.0.0                     
    Client MAC address: IntelCor_1c:8c:4c (e0:94:67:1c:8c:4c)   //client的实际网络硬件地址
    Client hardware address padding: 00000000000000000000
    Server host name not given                          //服务器的主机名,记录client获取启动配置信息的服务器名字
    Boot file name not given                                //即启动文件名,用于记录client的启动配置文件名字
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Request)                //以下是选项字段,太多就不一一介绍了
    Option: (61) Client identifier
    Option: (50) Requested IP Address
    Option: (12) Host Name
    Option: (81) Client Fully Qualified Domain Name
    Option: (60) Vendor class identifier
    Option: (55) Parameter Request List
    Option: (255) End

DHCP抓包实验

  一般情况下DHCP抓包是4个数据包,有时候会抓到2个数据包,因为我当前所处网络是一个较小的局域网,所以在本机上用wireshark抓包工具只抓到2个DHCP数据包,输入bootp把DHCP数据报过滤出来。

这里写图片描述
图2-DHCP数据包

  从抓取到的数据包可以看到,我的电脑在请求分配ip地址时,封装的源地址为0.0.0.0,以目的地址为255.255.255.255进行广播,然后当路由器收到该DHCP包时,会发送一个DHCP确认包给我的电脑,封装的源地址为192.168.1.1,即出口路由ip,目的地址192.168.1.100,即分配给我电脑的ip地址。

  下面我们再来看一下DHCP请求包和DHCP确认包。

DHCP发现(Request)消息

  DHCP发现(Request)数据报详细信息如图3所示:在以太网二层中封装了客户端的mac地址,目标得mac地址为全部以f填充,并以广播的形式发送。

这里写图片描述
图3-DHCP发现(Request)数据报

  从DHCP数据报的封装格式来看,在传输层确实封装成了UDP协议,有小伙伴有疑惑,为啥应用层封装的是BOOTP协议呢?

这是因为,最早的主机配置协议是BOOTP协议(引导程序协议),主要用于无盘工作站从服务器上获取ip地址或启动文件名(这种方式在网吧里使用比较常见),多与TFTP协议配合使用,但是由于BOOTP是一个比较古老的协议,后面为了增加新的功能又开发了DHCP协议,但DHCP协议兼容BOOTP协议。DHCP协议把BOOTP协议中的字段拿了过来,修改了一些字段和字段的含义。

由于DHCP协议过于复杂,有很多字段,这里我们只看几个非常重要的字段:

Bootstrap Protocol (Request)
    Message type: Boot Request (1)  //DHCP协议是基于boot协议的
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0xc1e65230
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
    Client IP address: 0.0.0.0
    Your (client) IP address: 0.0.0.0   //当客户端没有IP地址时,发送DHCP 发现(Request)消息时,ip地址是以0填充的
    Next server IP address: 0.0.0.0   //因为客户端不知道具体是找哪台服务器要ip地址,所以也是以0填充
    Relay agent IP address: 0.0.0.0   //此时回应的ip地址是以0填充的
    Client MAC address: IntelCor_1c:8c:4c (e0:94:67:1c:8c:4c)  //从这里看出,客户端发送DHCP数据包时封装了自己的mac地址
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Request)   //DHCP数据报的消息类型是Request
    Option: (61) Client identifier
    Option: (50) Requested IP Address
    Option: (12) Host Name
    Option: (81) Client Fully Qualified Domain Name
    Option: (60) Vendor class identifier
    Option: (55) Parameter Request List
    Option: (255) End

DHCP(ACK)消息

DHCP(ACK)数据报详细信息如图4所示:

这里写图片描述
图4-DHCP(ACK)消息数据报

Bootstrap Protocol (ACK)
    Message type: Boot Reply (2)  //服务器回应ACK确认消息给客户端
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0xc1e65230
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
    Client IP address: 0.0.0.0
    Your (client) IP address: 192.168.1.100  //服务器分配了一个192.168.1.100的ip地址给客户端
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: IntelCor_1c:8c:4c (e0:94:67:1c:8c:4c)  //同时封装了客户端的mac地址,用于标识把请求发送给指定的主机
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (ACK)   //在DHCP包选项里服务器以ACK回应了客户端
    Option: (54) DHCP Server Identifier    //标识了server的ip地址,并发送给client
    Option: (51) IP Address Lease Time
    Option: (1) Subnet Mask
    Option: (3) Router
    Option: (6) Domain Name Server
    Option: (255) End

再来看一下我本机的网关和dhcp服务器,ip地址
这里写图片描述

DHCP服务

  DHCP协议在帮我们分配IP地址的时候做了很多事情,这些DHCP服务中都是有记录的,因此可以通过DHCP的选项字段看一下DHCP服务在帮我们设置IP的同时,还做了那些事情。DHCP发现(Request)消息的option字段值:
这里写图片描述



  关于DHCP的选项有非常多,这里就不一一介绍了,只看一下比较重要的几个选项,option选项字段信息如下:

Option: (55) Parameter Request List
    Length: 12
    Parameter Request List Item: (1) Subnet Mask   //子网掩码
    Parameter Request List Item: (15) Domain Name  //域名
    Parameter Request List Item: (3) Router        //路由器
    Parameter Request List Item: (6) Domain Name Server  //域名服务器
    Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server  
    Parameter Request List Item: (46) NetBIOS over TCP/IP Node Type
    Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
    Parameter Request List Item: (31) Perform Router Discover
    Parameter Request List Item: (33) Static Route
    Parameter Request List Item: (121) Classless Static Route
    Parameter Request List Item: (249) Private/Classless Static Route (Microsoft)
    Parameter Request List Item: (43) Vendor-Specific Information

DHCP(ACK)数据报的字段值:
这里写图片描述

Option: (51) IP Address Lease Time
    Length: 4
    IP Address Lease Time: (7200s) 2 hours   //IP租用时间
Option: (1) Subnet Mask
    Length: 4
    Subnet Mask: 255.255.255.0    //DHCP设置的子网掩码
Option: (3) Router
    Length: 4
    Router: 192.168.1.1        //请求的路由设备信息
Option: (6) Domain Name Server   //DNS域名解析服务器
    Length: 4
    Domain Name Server: 192.168.1.1

关于更多DHCP选项字段详细介绍,可参考RFC文档:http://www.networksorcery.com/enp/protocol/bootp/options.htm#Glossary

猜你喜欢

转载自blog.csdn.net/qq_35733751/article/details/80147813