DHCP

DHCP协议提供了多种类型的报文,但是基本格式是相同的。不同类型的报文只是报文中的某些字段值不同。DHCP报文的基本格式如图1所示。

图1  DHCP报文格式

图1中每个字段含义如下:

op:报文的操作类型。分为请求报文和响应报文。客户端发送给服务器的包为请求报文,值为1;服务器发送给客户端的包为响应报文,值为2。

htype:DHCP客户端的MAC地址类型。MAC地址类型其实是指明网络类型,htype值为1时表示为最常见的以太网MAC地址类型。

hlen:硬件地址长度。以太网MAC地址长度为6个字节,即hlen值为6。

hops:跳数,DHCP报文经过的中继数量。每经过一个路由器,该字段就会增加1。如果没有经过路由器,则值为0(同一网内)。

xid:事务ID。客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。在一次请求中所有报文的xid都是一样的。

secs:DHCP客户端从获取到IP地址或者续约过程开始到现在所过去的时间,以秒为单位。在没有获得IP地址前,该字段始终为0。

flags:BOOTP标志位。只使用第0比特位,是广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送。其中,0表示采用单播发送方式,1表示采用广播发送方式。其余位尚未使用。

ciaddr:DHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示为0。这是因为在得到DHCP服务器确认前,DHCP客户端还没有分配到IP地址。

yiaddr:DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。

siaddr:为DHCP客户端分配IP地址等信息的其他DHCP服务器IP地址。仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。

giaddr:转发代理(网关)IP地址,DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继,则显示为0。

chaddr:DHCP客户端的MAC地址。在每个报文中都会显示对应DHCP客户端的MAC地址。

sname:为客户端分配IP地址的服务器名称(DNS域名格式)。只在DHCP Offer和DHCP ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。

file:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCP Offer报文中显示,其他报文中显示为空。

options:可选选项,格式为“代码+长度+数据”。

了解了DHCP报文格式以后,下面根据Wireshar抓取的数据包介绍DHCP请求IP地址时的每种报文。

1、DHCP Discover报文

DHCP Discover报文数据包如图2所示。

图2  DHCP Discover报文

该数据包是客户端向服务器发送的DHCP Discover数据包。在图2中,由于当前客户端还没有IP地址,所以源IP地址为0.0.0.0;客户端是向网络中所有服务器进行发送,使用的是广播包,所以目标IP地址为255.255.255.255。在Bootstrap Protocol(Discover)部分中显示了该数据包报文的每个字段。为了方便介绍,下面将报文字段列出并标注如下:

Bootstrap Protocol (Discover)
Message type: Boot Request (1) #报文的操作类型,这是一个请求包,所以该选项的值为1
Hardware type: Ethernet (0x01)   #硬件类型为Ethernet
Hardware address length: 6         #硬件地址长度为6
Hops: 0                                         #经过DHCP中继数为0
Transaction ID: 0x597c6b82        #事务ID
Seconds elapsed: 0                      #客户端启动时间
Bootp flags: 0x0000 (Unicast)      #BOOTP标识字段
Client IP address: 0.0.0.0              #客户端IP地址
Your (client) IP address: 0.0.0.0    #服务器分配给自己的IP地址
Next server IP address: 0.0.0.0     #下一个服务器的IP地址
Relay agent IP address: 0.0.0.0    #DHCP中继器的IP地址
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a) #客户端的MAC地址
Client hardware address padding: 00000000000000000000   #客户端硬件地址填充
Server host name not given        #服务器主机名
Boot file name not given            #启动文件名
Magic cookie: DHCP                   #与BOOTP兼容
Option: (53) DHCP Message Type (Discover)  #DHCP消息类型为53
Length: 1
DHCP: Discover (1)     #发现包
Option: (61) Client identifier  #客户端标识符
Length: 7
Hardware type: Ethernet (0x01)    #硬件类型为Ethernet
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)   #客户端MAC地址
Option: (50) Requested IP Address   #请求IP地址
Length: 4
Requested IP Address: 192.168.0.108  #请求的IP地址
Option: (12) Host Name    #客户端主机名
Length: 15
Host Name: WIN-RKPKQFBLG6C        #主机名
Option: (60) Vendor class identifier    #供应商类标识符
Length: 8
Vendor class identifier: MSFT 5.0       #供应商标识符为MSFT 5.0
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 #NetBIOS名称服务
Parameter Request List Item: (46) NetBIOS over TCP/IP Node Type #NetBIOS节点类型
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope  #NetBIOS作用范围
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  #供应商特定信息
Option: (255) End
Option End: 255
Padding: 000000000000000000000000
上述输出信息显示了DHCP Discover报文中相关字段的信息。可以看到客户端的IP地址为0.0.0.0,MAC地址为00:0c:29:db:3f:0a,主机名为WIN-RKPKQFBLG6C,事务ID为0x597c6b82等信息。

2、DHCP Offer报文

DHCP Offer报文数据包如图3所示。

图3  DHCP Offer报文数据包

该数据包是DHCP服务器收到客户端DHCP Discover广播包后返回的DHCP Offer包。报文字段信息如下:

Bootstrap Protocol (Offer)
Message type: Boot Reply (2)  #报文的操作类型,这是一个响应包,所以该选项的值为2
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x597c6b82  #事务ID
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.0.108 #服务器分配给客户端的IP地址
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
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
Length: 4
DHCP Server Identifier: 192.168.0.1 #DNS服务器标识地址为192.168.0.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (7200s) 2 hours
Option: (1) Subnet Mask   #服务器分配给客户端的子网掩码
Length: 4
Subnet Mask: 255.255.255.0  #子网掩码为255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.0.1
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.0.1
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...

其中只标注了几个重要字段的信息。由于是DHCP服务器给DHCP客户端发送提供的地址信息。因此,报文中应该包含DHCP服务器提供给客户端的IP地址信息,这里为192.168.0.108;提供给客户端的子网掩码信息这里为255.255.255.0。事务ID为0x597c6b82,与DHCP Discover报文中的事务ID相同,因此属于同一请求地址过程。

另外,可以看到服务器标识地址为192.168.0.1,所以捕获的数据包的源IP地址为192.168.0.1。目标地址为提供的IP地址192.168.0.108。

3、DHCP Request报文

DHCP Request报文数据包如图4所示。

图4  DHCP Request报文

DHCP Request报文数据包是DHCP客户端向网络中所有DHCP服务器主机发出的DHCP Request消息。由于此时客户端还没有真正拥有IP地址,因此源IP地址仍然为0.0.0.0,该数据包是用来通知所有服务器的,以广播形式发出,因此目标IP地址为255.255.255.255。报文字段信息如下:
Bootstrap Protocol (Request)
Message type: Boot Request (1) #报文的操作类型,这是一个请求包,所以该选项的值为1
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x597c6b82  #事务ID
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0    #客户端IP地址
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: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
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: (61) Client identifier
Length: 7
Hardware type: Ethernet (0x01)
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
Option: (50) Requested IP Address
Length: 4
Requested IP Address: 192.168.0.108 #客户端选择租用的IP地址为192.168.0.108
…     #省略部分信息

其中,事务ID与DHCP Discover、DHCP Offer阶段的事务ID相同,从输出信息还可以看到客户端请求的IP地址为192.168.0.108,表示要向该DHCP服务器租用地址。

4、DHCP ACK报文

DHCP ACK报文数据包如图5所示。

图5  DHCP ACK报文

DHCP ACK数据包是DHCP服务器给客户端发送的确认数据包。报文字段信息如下:

Bootstrap Protocol (ACK)
Message type: Boot Reply (2)  #报文的操作类型,这是一个响应包,所以该选项的值为2
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x597c6b82  #事务ID
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.0.108 #客户端可以使用的IP地址为192.168.0.108
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
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
Length: 4
DHCP Server Identifier: 192.168.0.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (7200s) 2 hours
Option: (1) Subnet Mask   #客户端可以使用的子网掩码
Length: 4
Subnet Mask: 255.255.255.0   #子网掩码为255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.0.1
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.0.1
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...

以上输出信息是服务器给客户端提供租约地址的确认包。其中,客户端可以使用的租约IP地址为192.168.0.108;可以使用的子网掩码为255.255.255.0。

 

 

客户端                                            服务器
DHCP Discover(广播)                     DHCP Offer 
DHCP Request(广播)                      DHCP ACK/NAK
1. 客户端发送DHCP Discover(广播)  报文,目的地址 255.255.255.255.用于发现广播域中的DHCP服务器。
2. 服务器收到客户端发送的DHCP Discover(广播)  报文后,将从地址池中挑选一个可用IP地址发送 DHCP Offer给客户端。报文中包含给客户端的IP地址、地址租约期限,其他还可能有网关IP地址、DNS服务器IP地址等。
3. 客户端可能会收到多个从DHCP服务器发出的DHCP Offer,它将选择第一个到达的DHCP Offer,所提供的IP,并发送DHCP Request(广播) ,该报文中携带了收到的第一个DHCP 服务器所给的IP地址。其他DHCP服务器收到了客户端的DHCP Request(广播),便将地址收回。
4. 第一个DHCP 服务器,收到DHCP Request(广播)  后,进行基本信息检查,通过之后发送DHCP ACK。
5. 客户端在使用该地址前可能会做一个IP地址冲突的检查,发送免费ARP报文,用于检查该广播域内是否有其他设备已经占用了这个IP地址。

DHCP Snooping  确保客户端从可信任的服务器获取合法IP地址。交换机上激活DHCP Snooping后 接口存在两种角色:信任接口(允许接收包括DHCP Offer 在内的服务器应答报文)/非信任接口(丢弃包括DHCP Offer DHCP ACK/NAK等在内的服务器应答报文 )


如果客户端有了IP地址,将不再发送DHCP Discover包。这时,如果要获取网络内DHCP服务器信息,可以使用netwox提供的编号为179的模块来实现。该模块通过向DHCP服务器广播发送一个DHCP INFORM包,以获取相关的配置参数。DHCP服务器接收到该数据包后,将根据租约查找相应的配置信息,并返回一个DHCP ACK消息。该消息包括相应的客户配置参数,但不包括分配的网络地址。

获取DHCP服务器详细的网络配置信息,执行命令如下:

root@daxueba:~# netwox 179

执行命令后将向DHCP服务器广播发送INFORM报文,同时会得到DHCP服务器返回的ACK报文。下面将信息进行拆分后分别介绍。

1)发送的INFORM报文信息的输出信息如下:

I send a INFORM:
DHCP____________________________________________________________.
| op=request  hops=0    xid=52FEF936  secs=0    flags=0000
| client=192.168.59.133  your=0.0.0.0
| server=0.0.0.0  agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8   | #客户端MAC地址
| sname:
| file:
| msgtype: inform
| clientidtype: 1
| clientid: 000c29fddeb8
| reqlist[0]: 1 (subnetmask)        |  #请求的网络配置信息
| reqlist[1]: 3 (gateways)
| reqlist[2]: 4 (timeservers)
| reqlist[3]: 5 (nameservers)
| reqlist[4]: 6 (dnsservers)
| reqlist[5]: 7 (logservers)
| reqlist[6]: 9 (lprservers)
| reqlist[7]: 12 (hostname)
| reqlist[8]: 15 (domainname)
| reqlist[9]: 28 (broadcastad)
| reqlist[10]: 31 (performroutdisc)
| reqlist[11]: 33 (staticroutes)
| reqlist[12]: 40 (nisdomain)
| reqlist[13]: 41 (nisservers)
| reqlist[14]: 51 (ipadleasetime)
| reqlist[15]: 58 (renewaltime)
| reqlist[16]: 59 (rebindingtime)
| reqlist[17]: 64 (nispdomain)
| reqlist[18]: 65 (nispserver)
| reqlist[19]: 69 (smtpservers)
| reqlist[20]: 70 (pop3servers)
| reqlist[21]: 71 (nntpservers)
| reqlist[22]: 72 (wwwservers)
| reqlist[23]: 74 (ircservers)
|_______________________________________________

以上输出信息中,第1行表示DHCP客户端向DHCP服务器发送了INFORM报文,用来请求网络配置信息。下面的信息为报文包含的信息。其中,xid表示事务ID为52FEF936;client表示当前客户端的IP地址为192.168.59.133;clienteth表示当前客户端的MAC地址为00:0C:29:FD:DE:B8。
2)客户端收到DHCP服务器返回的ACK报文,并输出如下信息:

Server sent us this ACK:
DHCP____________________________________________________________.
| op=reply   hops=0    xid=52FEF936  secs=0      flags=0000
| client=192.168.59.133  your=0.0.0.0
| server=192.168.59.254  agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: ack
| serverid: 192.168.59.254         |   #服务器IP地址
| subnetmask: 255.255.255.0    |   #子网掩码
| gateways[0]: 192.168.59.2      |   #网关
| dnsservers[0]: 192.168.59.2    |   #DNS服务地址
| domainname: 'localdomain'   |   #域名
| broadcastad: 192.168.59.255                                  |      #广播地址
| end
|____________________________________________________

以上输出信息中,第1行表示DHCP返回了ACK报文。其中,xid的值也为52FEF936,子网掩码为255.255.255.0,网关为192.168.59.2。

3)为了验证该命令发送的数据包,下面通过抓包进行查看,如图1所示。

图1  捕获的数据包

在获取DHCP服务器信息时,为了避免被发现,可以伪造IP地址和MAC地址。例如,设置IP地址为192.168.59.150,MAC地址为b1:b2:b3:0a:1a:3a。执行命令如下:

root@daxueba:~# netwox 179 -i 192.168.59.150 -e b1:b2:b3:0a:1a:3a

输出信息如下:

I send a INFORM:
DHCP____________________________________________________________.
| op=request  hops=0    xid=5D72AD9C  secs=0      flags=0000
| client=192.168.59.150  your=0.0.0.0
| server=0.0.0.0  agent=0.0.0.0
| clienteth=B1:B2:B3:0A:1A:3A
…   #省略其他信息

其中,客户端的IP地址为伪造的地址192.168.59.150,客户端的MAC地址为伪造的址B1:B2:B3:0A:1A:3A。

默认情况下,都是由操作系统完成IP地址请求过程的。用户也可以手动请求IP地址。netwox工具提供了编号为171的模块,它可以充当DHCP客户端向DHCP服务器请求IP地址。

模拟DHCP客户端从DHCP服务器获取IP地址。执行命令如下:

root@daxueba:~# netwox 171

执行命令后将完成获取IP地址的整个过程,并输出每个过程相关的信息。为了方便介绍,下面将信息进行拆分,然后分别介绍。

1)发现阶段的输出信息如下:

I send a DISCOVER:
DHCP____________________________________________________________.
| op=request  hops=0    xid=B8ED8552  secs=0      flags=0000
| client=0.0.0.0  your=0.0.0.0
| server=0.0.0.0  agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: discover
| clientidtype: 1
| clientid: 000c29fddeb8
| reqlist[0]: 1 (subnetmask)
#下面为客户端要请求的列表信息
| reqlist[1]: 3 (gateways)
| reqlist[2]: 4 (timeservers)
| reqlist[3]: 5 (nameservers)
| reqlist[4]: 6 (dnsservers)
| reqlist[5]: 7 (logservers)
| reqlist[6]: 9 (lprservers)
| reqlist[7]: 12 (hostname)
| reqlist[8]: 15 (domainname)
| reqlist[9]: 28 (broadcastad)
| reqlist[10]: 31 (performroutdisc)
| reqlist[11]: 33 (staticroutes)
| reqlist[12]: 40 (nisdomain)
| reqlist[13]: 41 (nisservers)
| reqlist[14]: 51 (ipadleasetime)
| reqlist[15]: 58 (renewaltime)
| reqlist[16]: 59 (rebindingtime)
| reqlist[17]: 64 (nispdomain)
| reqlist[18]: 65 (nispserver)
| reqlist[19]: 69 (smtpservers)
| reqlist[20]: 70 (pop3servers)
| reqlist[21]: 71 (nntpservers)
| reqlist[22]: 72 (wwwservers)
| reqlist[23]: 74 (ircservers)
|___________________________________________________________

以上输出信息中,第1行表示客户端发送了一个Discover包,用来向服务器请求租用的IP地址。下面的信息为对应的报文信息。其中,xid表示事务ID为B8ED8552,client表示客户端IP地址为0.0.0.0,your表示此时客户端还没有IP地址,因此也为0.0.0.0。

2)提供阶段的输出信息如下:

Server sent us this OFFER:
DHCP____________________________________________________________.
| op=reply   hops=0    xid=B8ED8552  secs=0      flags=0000
| client=0.0.0.0  your=192.168.59.131
| server=192.168.59.254  agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: offer
| serverid: 192.168.59.254
| ipadleasetime: 1800
| subnetmask: 255.255.255.0       |      #子网掩码
| gateways[0]: 192.168.59.2         |      #网关
| dnsservers[0]: 192.168.59.2       |      #DNS服务器地址
| domainname: 'localdomain'      |      #域名
| broadcastad: 192.168.59.255     |      #广播地址
| renewaltime: 900                       |      #更新时间
| rebindingtime: 1575                  |      #重新连接时间
| end
|_____________________________________________________
Server 192.168.59.254(00:50:56:ED:87:BC) proposes address 192.168.59.131

以上输出信息中,第1行表示服务器向客户端返回了提供IP地址租约的数据包。下面的信息为对应的报文信息。其中,xid表示事务ID为B8ED8552,与发现阶段事务ID相同;your表示服务器给客户端提供的IP地址为192.168.59.131;server表示此时服务器的IP地址为192.168.59.254。从输出信息中还可以看到服务器为客户端提供的子网掩码、网关、DNS服务器地址等信息。输出信息的最后一行为总结信息,表示服务器192.168.59.254为客户端提供的IP地址为192.168.59.131。

3)选择阶段的输出信息如下:

I accept previous OFFER:
DHCP____________________________________________________________.
| op=request  hops=0    xid=B8ED8552  secs=0      flags=0000
| client=0.0.0.0  your=0.0.0.0
| server=0.0.0.0  agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: request
| clientidtype: 1
| clientid: 000c29fddeb8
| requestedipad: 192.168.59.131   |      #选择请求的IP地址
| serverid: 192.168.59.254              |      #服务器IP地址
| reqlist[0]: 1 (subnetmask)            |      #下面为请求的其他信息
| reqlist[1]: 3 (gateways)
| reqlist[2]: 4 (timeservers)
| reqlist[3]: 5 (nameservers)
| reqlist[4]: 6 (dnsservers)
| reqlist[5]: 7 (logservers)
| reqlist[6]: 9 (lprservers)
| reqlist[7]: 12 (hostname)
| reqlist[8]: 15 (domainname)
| reqlist[9]: 28 (broadcastad)
| reqlist[10]: 31 (performroutdisc)
| reqlist[11]: 33 (staticroutes)
| reqlist[12]: 40 (nisdomain)
| reqlist[13]: 41 (nisservers)
| reqlist[14]: 51 (ipadleasetime)
| reqlist[15]: 58 (renewaltime)
| reqlist[16]: 59 (rebindingtime)
| reqlist[17]: 64 (nispdomain)
| reqlist[18]: 65 (nispserver)
| reqlist[19]: 69 (smtpservers)
| reqlist[20]: 70 (pop3servers)
| reqlist[21]: 71 (nntpservers)
| reqlist[22]: 72 (wwwservers)
| reqlist[23]: 74 (ircservers)
|_________________________________________________
以上输出信息中,第1行表示客户端接收了服务器提供的地址租约。下面的信息为对应的报文信息。其中,xid表示事务ID为B8ED8552;由于客户端选择了要请求的IP地址,但是没有真正获取到IP地址,因此client和your均为0.0.0.0;requestedipad表示客户端选择的IP地址为192.168.59.131。serverid表示服务器的IP地址为192.168.59.254。

4)确认阶段的输出信息如下:

Server sent us this ACK:
DHCP____________________________________________________________.
| op=reply   hops=0    xid=B8ED8552  secs=0      flags=0000
| client=0.0.0.0  your=192.168.59.131
| server=192.168.59.254  agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: ack
| serverid: 192.168.59.254
| ipadleasetime: 1800
| subnetmask: 255.255.255.0      |      #客户端的子网掩码
| gateways[0]: 192.168.59.2        |      #客户端的网关
| dnsservers[0]: 192.168.59.2      |      #客户端的DNS服务器
| domainname: 'localdomain'
| broadcastad: 192.168.59.255
| renewaltime: 900
| rebindingtime: 1575
| end
|_________________________________________________
Server 192.168.59.254(00:50:56:ED:87:BC) gave address 192.168.59.131
Press q to quit.

以上输出信息中,第1行表示服务器确认了客户端要租约的IP地址信息,客户端可以使用请求的IP地址了。下面的信息为对应的报文信息。其中,your表示客户端可以租用的IP地址为192.168.59.131;其他信息给出了客户端使用的子网掩码、网关、DNS服务器地址等。输出的最后一行信息表示用户可以使用快捷键q退出。如果退出,则客户端将不再租用这个IP地址,会释放该地址。

5)为了确认模拟客户端从服务器上是否获取到了IP地址,可以通过抓包进行验证,如图1所示。其中的4个数据包就是获取IP地址的4个阶段的数据包。

图1  捕获的数据包

6)如果使用了快捷键q退出,将产生释放地址的数据包。输出信息如下:

I RELEASE the address:
DHCP__________________________________________________________.
| op=request  hops=0    xid=CC6236A1  secs=0      flags=0000
| client=192.168.59.131  your=0.0.0.0
| server=0.0.0.0  agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: release
| serverid: 192.168.59.254
| clientidtype: 1
| clientid: 000c29fddeb8
|___________________________________________________________

以上输出信息,第1行表示客户端释放了IP地址。下面的信息为对应的报文信息。其中,xid的值为CC6236A1,这与获取IP地址时所产生的事务ID不同;client表示客户端要释放的IP地址为192.168.59.131。

7)通过抓包捕获的释放地址数据包如图2所示。

图2  释放地址数据包

8)从DHCP服务器上获取IP地址时,为了隐藏真实的MAC地址,可以伪造虚假MAC地址。例如,设置假MAC地址为01:02:03:A1:A2:A3。执行命令如下:

root@daxueba:~# netwox 171 -e 01:02:03:a1:a2:a3

输出信息如下:

I send a DISCOVER:
DHCP____________________________________________________________.
| op=request  hops=0    xid=BDC49614  secs=0      flags=0000
| client=0.0.0.0  your=0.0.0.0
| server=0.0.0.0  agent=0.0.0.0
| clienteth=01:02:03:A1:A2:A3
···     #省略其他信息

从输出信息报文中可以看到,此时客户端的MAC地址为假的地址01:02:03:A1:A2:A3。
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值