DHCP协议分析
實驗環境
? 操作機:Windows XP
實驗目的
1、 熟悉DHCP協議的基本概念
2、 學會利用wireshark捕獲含有DHCP協議的數據包
3、 在wireshark中分析DHCP協議提供IP地址的四個步驟
實驗工具
o wireshark
________________________________________
實驗步驟
DHCP的工作原理
DHCP的前身:BOOTP協議(Bootstrap Protocol),屬于TCP/IP的應用層協議。BOOTP協議當初被創建出來給連接到網絡的設備自動分配地址。直到后來才被更加復雜而完善的DHCP協議所取代。
DHCP在網絡配置方面非常重要,特別是當一個網絡的規模較大時,使用DHCP可以極大地減輕網絡管理員的工作量。另外,對于移動設備來說,由于使用的環境會經常改變,那么它所處的網絡IP地址也就可能隨時變動。如果每次都需要通過手工修改來設置它們的IP地址,使用起來就會非常麻煩。那么此時,就可以使用DHCP來減輕負擔。這里我們通過下圖來分析一下DHCP的工作流程:
在使用DHCP的時候,網絡上首先必須有一臺DHCP服務器,而其它計算機則是DHCP的客戶端。整個DHCP的工作過程分為4個階段,即發現階段(Discover)、提供階段(offer)、請求階段(request)以及確認階段(ACK)。這里分別簡單介紹一下上述四種數據包的類型:
1、DHCP Discover
DHCP客戶端請求地址時,并不知道DHCP服務器的位置,因此DHCP客戶端會在本地網絡內以廣播的形式發送請求數據包。這個數據包就被稱作Discover數據包,目的是發現網絡中的DHCP服務器。所有收到Discover數據包的DHCP服務器都會發送響應數據包,那么客戶端就可以知道網絡中存在的DHCP服務器的位置。
2、DHCP offer
當DHCP服務器收到Discover數據包后,就會在所配置的地址池中尋找一個合適的IP地址,加上相應的租約期限和其它配置信息(如網關、DNS服務器等),構造一個offer數據包,發送給客戶端,告知客戶端本服務器可以為其提供IP地址。
3、DHCP Request
DHCP客戶端可能會收到很多的offer,所以必須要從中選擇一個。一般來說,客戶端會選擇第一個回應的offer數據包服務器作為自己的目標服務器,并回應一個廣播Request數據包,以告訴所有的服務器,自己已經做出了選擇。當DHCP客戶端成功獲取IP地址后,在地址使用租期過去一半的時候,會向DHCP服務器發送單播Request數據包,用于延續租期。如果沒有收到DHCP ACK數據包,那么在租期過去四分之三時,會發送廣播Request數據包來延續租期。
4、DHCP ACK
DHCP服務器收到Request數據包后,根據Request數據包中攜帶的用戶MAC地址來查找有沒有相應的租約記錄,如果有則發送ACK數據包作為回應,通知用戶可以使用分配的IP地址。
DHCP數據包的捕獲
為了捕獲到DHCP數據包,這里我在虛擬機的環境下,首先打開Wireshark,在捕獲選項中,設置篩選條件為UDP,因為DHCP是使用UDP協議工作的。之后開啟Wireshark的捕獲。現在我們需要讓系統產生DHCP的數據包,由于DHCP只有當主機的IP地址過期或者重新啟動系統時,才會重新請求IP地址。否則是不能夠產生DHCP數據包的。那么我們可以通過重新啟動網卡的方法,進行數據包的捕獲。
這里我們打開命令提示符,使用ipconfig的release以及renew參數來釋放并重新獲取地址信息。
此時我們在Wireshark中就可以獲取DHCP數據包了。
步驟4:DHCP數據包的分析
由于在捕獲的文件中還存在有其它的數據包,因此這里我們可以加入一個篩選條件bootp,那么此時剩下的就全都是DHCP協議的數據包了:
在這里我們可以看到DHCP的釋放、發現、提供、請求和確認數據包。這里我們分別進行分析。
1、釋放數據包
捕獲文件的第一個數據包就是釋放數據包。當用戶不再需要使用分配的IP地址時,就會向DHCP服務器發送 Release數據包,告知服務器,用戶已經不再需要分配的IP地址,DHCP服務器就會釋放掉被綁定的租約。
2、發現數據包
我們再看一下第二個數據包。它是從0.0.0.0的68號端口發往255.255.255.255的67號端口。客戶端使用0.0.0.0,是因為它目前還沒有IP地址。數據包被發往255.255.255.255,是因為這是一個獨立于網絡的廣播地址,這就能夠確保這個數據包會被發送到網絡中的所有設備上。因為客戶端并不知道DHCP服務器的地址,所以這么做就一定可以找到正在監聽的DHCP服務器。
接下來我們可以看到DHCP是基于UDP作為其傳輸協議的,因為DHCP客戶端對請求響應速度有很高的要求。而DHCP有其內置的保證可靠性的方法,也就意味著UDP是最適合的協議。需要說明的是,由于Wireshark在處理DHCP時,仍然會引用BOOTP,所以我們會在Packet Details面板中看到Bootstrap Protocol,而不是DHCP:
這是一個請求數據包,因為在消息類型(Message type)中被標記為1。在這個發現數據包中,還可以看到很多為空的IP地址域。另外還需要我們注意的是選項中的內容,它用來對DHCP數據包進行擴展,以提供更多的功能。這里比較重要的有:
DHCP消息類型(DHCP Message Type):這個選項是一個長度和值均為1的53類型。表明它是一個發現數據包。
客戶端標識符(Client identifier):這里提供了客戶端請求IP地址的額外信息。
所請求的IP地址(Requested IP Address):這里提供了客戶端希望得到的IP地址(通常是之前用過的IP地址)。
請求參數列表(Parameter Request List):這里列出了客戶端希望從DHCP服務器接收到的不同配置項(其它重要網絡設備的IP地址)。
3、提供數據包
捕獲文件的第三個數據包就是提供數據包。可以看到這個數據包是從192.168.147.254發往192.168.147.129的。盡管目標地址是192.168.147.129,也就是客戶端的地址,但事實上,客戶端還沒有這個地址,所以服務器會首先嘗試使用由ARP提供的客戶端硬件地址與之通信。如果通信失敗,那么它將會直接把提供數據包廣播出去,以進行通信。
這里我們看一下它的DHCP部分,它被稱為提供數據包,說明這是一個用于響應的消息類型。這個數據包包含了和前一個數據包相同的事務ID,通過這個IP就可以知道這個響應與我們原先的請求相對應。
這個提供數據包由DHCP服務器發出,用于向客戶端提供服務。它提供了關于它自己的信息,以及給客戶端提供的地址。如下圖所示:
在Your(client)IP address中,地址192.168.147.129就是要提供給客戶端的地址。而Next server IP address中的192.168.147.254表明我們的DHCP服務器與默認網關共享一個IP地址。
下面列出的第一個選項說明這個數據包是一個DHCP的提供數據包。選項中還需要我們關注的內容有:
IP地址租約時間(IP Address Lease Time)是30分鐘。
子網掩碼(Subnet Mask)是255.255.255.0。
路由器(Router)地址為192.168.147.2。
4、請求數據包
在客戶端接收到DHCP服務器的提供數據后,它將會以一個DHCP請求數據包作為接收確認:
這個數據包仍然從IP地址為0.0.0.0處發出,畢竟我們還沒有完成獲取IP地址的過程,但是數據包現在知道了DHCP服務器的存在。可以發現,這是一個請求數據包。這個數據包與發現數據包相似,其所有的IP地址信息都是空的。在最后的選項域中,我們看到這是一個DHCP請求。
5、確認數據包
整個過程的最后一步就是DHCP在確認數據包中給客戶端發送其所請求的IP地址,并在數據庫中記錄相關信息。那么此時客戶端就有了一個IP地址,就可以使用它在網絡上通信了。
DHCP租約內續租
當DHCP給一臺設備分配了一個IP地址時,它同時給客戶端定下了一個租約。這就表示著,客戶端只能夠在有限的時間內使用這個IP地址,到了時間就一定要續租。我們剛才介紹的DHCP數據包的分析過程是出現在客戶端第一次獲取IP地址或者其租約時間已經過期的情況下,這兩種情況就會被視為租約過期。
當一個擁有IP地址的客戶端在租約內重新啟動,它必須經過一次精簡版的DHCP數據包傳輸過程來重新認領它的IP地址。這個過程就被稱為租約內續租。
在租約內續租的時候,發現和提供數據包就變得沒有必要了,只需要完成請求和確認兩個步驟就可以了:
轉載于:https://www.cnblogs.com/Erma/p/10302250.html
總結
- 上一篇: matplotlib----初探----
- 下一篇: Linux 安全基线