DHCP
数据抓包分析–wireshark
DHCP
-(Dynamic Host Configuration Procotol
,动态主机配置协议),是一个局域网的网络协议,主要用于给内部网络或网络服务供应商自动分匹配IP
地址。属于TCP/IP
协议,使用UDP
进行工作。
DHCP
有三个端口,其中UDP67
和UDP68
为正常的DHCP
服务端口,分别为DHCP Server
和DHCP Client
的服务窗口,546号端口用于DHCPv6 Client
,而不是DHCPv4
,是因为DHCP failover
服务。该服务是需要特别开启的服务,用于做双击热备份。
作用
-
保证任何统一时刻,同一局域网内只能由一台
DHCP
客户机所使用 -
DHCP
可以给用户分配永久固定的IP
地址 -
DHCP
允许用其他方法获得IP
地址的主机共存,如手动配置IP
地址 -
DHCP
服务器向所有的BOOTP
客户端提供服务
DHCP
的三种地址分配方式
- 自动分配:
DHCP
服务器给客户端分配永久性的IP
地址 - 动态分配:
DHCP
给客户端分配的IP
地址过一段时间之后会过期,或者客户端可以主动释放该地址 - 手动配置:由用户手动为客户端指定
IP
地址
DHCP
工作流程
-
发现阶段,即
DHCP
客户端寻找DHCP
服务器的阶段。DHCP
客户端以广播的方式发送DHCP Discover
包,来寻找DHCP
服务器,即向地址255.255.255.255
发送广播信息,网络上所有装有TCP/IP
协议的主机都会接收到该广播信息,但是只有DHCP
服务器才会做出响应。 -
提供阶段:
DHCP
服务器提供地址的阶段,所有接收到请求的服务器都会从地址池中选一个IP
地址给客户端。 -
选择阶段:即
DHCP
从接收到的所有DHCP
提供的IP
地址中选择一个IP
地址的过程,广播方式传输,这样所有DHCP
服务器就直到了他选择了哪个DHCP
服务器提供的地址。 -
确认阶段:即
DHCP
服务器确认所提供的IP
地址阶段。当DHCP
服务器收到客户端发送的DHCP Request
请求信息之后,便向DHCP
客户端发送一个包含所提供的IP
地址和其他设置的DHCP Ack
在Linux
上抓DHCP
报文
开启wireshark
开始抓包,然后在命令行上使用以下命令重新获取IP
地址
# 释放对应网卡上的IP地址
$ sudo dhclient -r wlp4s0
# 指定网卡使用`DHCP`获取IP地址
$ sudo dhclient wlp4s0
或者在简单点,但是这样做需要足够快,因为网卡禁用之后就无法使用wireshark
进行抓包了,所以需要拉网同的同时赶快开始抓包,能不能抓到就看手速了 😹
# 下网卡
ifconfig wlp4s0 down
# 上网卡
ifconfig wlp4s0 up
DHCP
报文格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| op (1) | htype (1) | hlen (1) | hops (1) |
+---------------+---------------+---------------+---------------+
| xid (4) |
+-------------------------------+-------------------------------+
| secs (2) | flags (2) |
+-------------------------------+-------------------------------+
| ciaddr (4) |
+---------------------------------------------------------------+
| yiaddr (4) |
+---------------------------------------------------------------+
| siaddr (4) |
+---------------------------------------------------------------+
| giaddr (4) |
+---------------------------------------------------------------+
| |
| chaddr (16) |
| |
| |
+---------------------------------------------------------------+
| |
| sname (64) |
+---------------------------------------------------------------+
| |
| file (128) |
+---------------------------------------------------------------+
| |
| options (variable) |
+---------------------------------------------------------------+
op
: 报文的操作类型,分为请求报文和响应报文,1请求报文,2为响应报文,具体的报文类型在options
字段中标识htype
:DHCP
客户端的硬件地址类型1表示是ethernet
地址hlen
:DHCP
客户端的硬件地址长度hops
:DHCP
报文经过的DHCP
中继的数目。初始为0,报文每经过一个DHCP
中继,该字段就会增加1xid
: 客户端发起一次请求时选择的随机数,用来标识一次地址请求过程secs
:DHCP
客户端开始DHCP
请求后所经过的时间,目前未使用,固定为0flags
:DHCP
服务器相应报文是采用单播还是广播方式发送,只使用第0位比特位,0表示采用单播方式,1表示采用广播方式,其余比特位保留不用ciaddr
:DHCP
客户端的IP
地址yiaddr
:DHCP
服务器分配给客户端的IP
地址siaddr
:DHCP
客户端获取IP
地址等信息的服务器IP
地址giaddr
:DHCP
客户端发送请求报文后经过的第一个DHCP
中继的IP
地址chaddr
:DHCP
客户端的硬件地址sname
:DHCP
客户端获取IP
地址等信息的服务器名称file
:DHCP
服务器为DHCP
客户端指定的启动配置文件名称及路径信息。options
:可选变长字段选项字段,包含报文的类型、有效租期、DNS
服务器的IP
地址和WINS
服务器的IP
地址等配置信息。
DHCP
报文类型
– 来自wireshark数据包分析
DHCP 报文类型 | 描述 |
---|---|
DHCP Discover | DHCP Discover DHCP 客户端请求地址时,并不知道DHCP 服务器的位置,因此DHCP 客户端会在本地网络内以广播方式发送请求报文,这个报文成为Discover报文,目的是发现网络中的DHCP 服务器,所有收到Discover报文的DHCP 服务器都会发送回应报文,DHCP 客户端据此就可以知道网络中存在的DHCP 服务器的位置。 |
DHCP Offer | DHCP Offer DHCP 服务器收到Discover 报文后,就会在所配置的地址池中查找一个合适的ip 地址,加上相应的租约期限和其他配置信息(网关,DNS 服务器等),构造一个Offer 报文,发送给客户,告知用户本服务器可以为其提供IP 地址。(只是告诉client可以提供,是预分配,还需要client通过ARP 检测该IP 是否重复) |
DHCP Request | DHCP Request DHCP 客户端会收到很多Offer ,所以必须在这些回应中选择一个。Client通常选择第一个回应Offer报文的服务器作为自己的目标服务器,并回应一个广播Request报文,通告选择的服务器。DHCP 客户端成功获取IP 地址后,在地址使用租期过去1/2时,会向DHCP 服务器发送单播Request报文续延租期,如果没有收到DHCP ACK 报文,在租期过去3/4时,发送广播Request报文续延租期。 |
DHCP ACK | DHCP ACK DHCP 服务器收到Request 报文后,根据Request 报文中携带的用户MAC 来查找有没有相应的续约记录,如果有则发送ACK 报文作为回应,通知用户可以使用分配的ip 地址 |
DHCP NAK | DHCP NAK 如果DHCP 服务器收到Request 报文后,没有发现相应的租约记录或者由于某些原因无法正常分配ip 地址,则发送ACK 报文作为回应,通知用户无法分配合适的ip 地址。 |
DHCP Release | DHCP Release 当用户不在需要使用分配ip 地址时,就会向DHCP 服务器发送Release 报文,告知服务器用户不再需要分配ip 地址,DHCP 服务器会释放被绑定的租约。 |
DHCP Decline | DHCP Decline DHCP 客户端收到DHCP 服务器回应的ACK 报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则发送Decline报文,通知服务器所分配的ip 地址不可用。 |
DHCP Inform | DHCP Inform DHCP 客户端如果需要从DHCP 服务器端获取更为详细的配置信息,则发送Inform 报文向服务器进行请求,服务器收到该报文后,将根据租约进行查找,找到相应的配置信息后,发送ACK 报文回应DHCP 客户端(极少用到)。 |
以下是整个DHCP
正常交互的过程
# 1. 首先发送 发现包
Frame 68: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on interface wlp4s0, id 0
# ff:ff:ff:ff:ff:ff MAC地址采用广播的形式
Ethernet II, Src: Chongqin_e1:18:a9 (40:23:43:e1:18:a9), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
# 255.255.255.255 IP地址采用广播的形式
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
User Datagram Protocol, Src Port: 68, Dst Port: 67
Dynamic Host Configuration Protocol (Discover)
Message type: Boot Request (1)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x2e2bec50
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Chongqin_e1:18:a9 (40:23:43:e1:18:a9)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Discover)
Length: 1
DHCP: Discover (1)
Option: (12) Host Name
Length: 14
Host Name: andrew-G3-3590
Option: (55) Parameter Request List
Length: 13
Parameter Request List Item: (1) Subnet Mask
Parameter Request List Item: (28) Broadcast Address
Parameter Request List Item: (2) Time Offset
Parameter Request List Item: (3) Router
Parameter Request List Item: (15) Domain Name
Parameter Request List Item: (6) Domain Name Server
Parameter Request List Item: (119) Domain Search
Parameter Request List Item: (12) Host Name
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
Parameter Request List Item: (26) Interface MTU
Parameter Request List Item: (121) Classless Static Route
Parameter Request List Item: (42) Network Time Protocol Servers
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000…
No. Time Source Destination Protocol Length Info
69 0.003566600 192.168.199.1 192.168.199.235 DHCP 342 DHCP Offer - Transaction ID 0x2e2bec50
# 2. 服务器发送 offer包
Frame 69: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on interface wlp4s0, id 0
# MAC地址 指定 Chongqin_e1:18:a9
Ethernet II, Src: HIWIFI_65:b0:40 (d4:ee:07:65:b0:40), Dst: Chongqin_e1:18:a9 (40:23:43:e1:18:a9)
# 正常的IP地址会指向 255.255.255.255 但是由于我这里抓包的时候,不是释放之后抓奥,而是使用程序重新获取的IP地址,所以服务器直接将offer包发废了设备的老的IP地址
Internet Protocol Version 4, Src: 192.168.199.1, Dst: 192.168.199.235
User Datagram Protocol, Src Port: 67, Dst Port: 68
Dynamic Host Configuration Protocol (Offer)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x2e2bec50
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.199.235
Next server IP address: 192.168.199.1
Relay agent IP address: 0.0.0.0
Client MAC address: Chongqin_e1:18:a9 (40:23:43:e1:18:a9)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Offer)
Length: 1
DHCP: Offer (2)
Option: (54) DHCP Server Identifier (192.168.199.1)
Length: 4
DHCP Server Identifier: 192.168.199.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (43200s) 12 hours
Option: (58) Renewal Time Value
Length: 4
Renewal Time Value: (21600s) 6 hours
Option: (59) Rebinding Time Value
Length: 4
Rebinding Time Value: (37800s) 10 hours, 30 minutes
Option: (1) Subnet Mask (255.255.255.0)
Length: 4
Subnet Mask: 255.255.255.0
Option: (28) Broadcast Address (192.168.199.255)
Length: 4
Broadcast Address: 192.168.199.255
Option: (3) Router
Length: 4
Router: 192.168.199.1
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.199.1
Option: (15) Domain Name
Length: 3
Domain Name: lan
Option: (255) End
Option End: 255
Padding: 000000
No. Time Source Destination Protocol Length Info
70 0.000447243 0.0.0.0 255.255.255.255 DHCP 342 DHCP Request - Transaction ID 0x2e2bec50
# 客户端接受一个IP地址之后 胡以广播的方式 告知接受服务器提供的IP地址信息
Frame 70: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on interface wlp4s0, id 0
Ethernet II, Src: Chongqin_e1:18:a9 (40:23:43:e1:18:a9), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
User Datagram Protocol, Src Port: 68, Dst Port: 67
Dynamic Host Configuration Protocol (Request)
Message type: Boot Request (1)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x2e2bec50
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Chongqin_e1:18:a9 (40:23:43:e1:18:a9)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Request)
Length: 1
DHCP: Request (3)
Option: (54) DHCP Server Identifier (192.168.199.1)
Length: 4
DHCP Server Identifier: 192.168.199.1
Option: (50) Requested IP Address (192.168.199.235)
Length: 4
Requested IP Address: 192.168.199.235
Option: (12) Host Name
Length: 14
Host Name: andrew-G3-3590
Option: (55) Parameter Request List
Length: 13
Parameter Request List Item: (1) Subnet Mask
Parameter Request List Item: (28) Broadcast Address
Parameter Request List Item: (2) Time Offset
Parameter Request List Item: (3) Router
Parameter Request List Item: (15) Domain Name
Parameter Request List Item: (6) Domain Name Server
Parameter Request List Item: (119) Domain Search
Parameter Request List Item: (12) Host Name
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
Parameter Request List Item: (26) Interface MTU
Parameter Request List Item: (121) Classless Static Route
Parameter Request List Item: (42) Network Time Protocol Servers
Option: (255) End
Option End: 255
Padding: 00000000000000000000000000
No. Time Source Destination Protocol Length Info
71 0.005910802 192.168.199.1 192.168.199.235 DHCP 355 DHCP ACK - Transaction ID 0x2e2bec50
# 服务器确认接受的是自己提供的IP地址之后 会向客户端回复ACK
Frame 71: 355 bytes on wire (2840 bits), 355 bytes captured (2840 bits) on interface wlp4s0, id 0
Ethernet II, Src: HIWIFI_65:b0:40 (d4:ee:07:65:b0:40), Dst: Chongqin_e1:18:a9 (40:23:43:e1:18:a9)
Internet Protocol Version 4, Src: 192.168.199.1, Dst: 192.168.199.235
User Datagram Protocol, Src Port: 67, Dst Port: 68
Dynamic Host Configuration Protocol (ACK)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x2e2bec50
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.199.235
Next server IP address: 192.168.199.1
Relay agent IP address: 0.0.0.0
Client MAC address: Chongqin_e1:18:a9 (40:23:43:e1:18:a9)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (ACK)
Length: 1
DHCP: ACK (5)
Option: (54) DHCP Server Identifier (192.168.199.1)
Length: 4
DHCP Server Identifier: 192.168.199.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (43200s) 12 hours
Option: (58) Renewal Time Value
Length: 4
Renewal Time Value: (21600s) 6 hours
Option: (59) Rebinding Time Value
Length: 4
Rebinding Time Value: (37800s) 10 hours, 30 minutes
Option: (1) Subnet Mask (255.255.255.0)
Length: 4
Subnet Mask: 255.255.255.0
Option: (28) Broadcast Address (192.168.199.255)
Length: 4
Broadcast Address: 192.168.199.255
Option: (3) Router
Length: 4
Router: 192.168.199.1
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.199.1
Option: (15) Domain Name
Length: 3
Domain Name: lan
Option: (12) Host Name
Length: 14
Host Name: andrew-G3-3590
Option: (255) End
Option End: 255