跨境電子商務(wù)網(wǎng)站建設(shè)ks免費刷粉網(wǎng)站推廣
目錄
一、關(guān)于Wireshark
1.1、 什么是Wireshark
1.2、下載及安裝
二、HTTP介紹
2.1、HTTP請求過程介紹
2.2 、TCP協(xié)議基礎(chǔ)知識
2.2.1、概念介紹
2.2.2、TCP協(xié)議的工作原理
2.2.3、三次握手建立連接
?2.3.4、四次揮手斷開連接
2.3、Wireshark抓包分析過程
2.3.1、三次握手
2.3.2、發(fā)送請求
2.3.3、服務(wù)器響應(yīng)
2.3.4、四次揮手
一、關(guān)于Wireshark
1.1、 什么是Wireshark
Wireshark(前身 Ethereal)是一個網(wǎng)絡(luò)包分析工具。該工具主要是用來捕獲網(wǎng)絡(luò)數(shù)據(jù)包,并自動解析數(shù)據(jù)包,為用戶顯示數(shù)據(jù)包的詳細信息,供用戶對數(shù)據(jù)包進行分析。
它可以運行在 Windows 和 Linux 操作系統(tǒng)上。可以使用該工具捕獲并分析各類協(xié)議數(shù)據(jù)包,本文將講解該工具的安裝及基本使用方法。
1.2、下載及安裝
Kali Linux 系統(tǒng)自帶 Wireshark 工具,而 Windows 系統(tǒng)中默認沒有安裝該工具。因此,本節(jié)講解如何在 Windows 系統(tǒng)中安裝 Wireshark 工具。
-
打開網(wǎng)址?http://www.wireshark.org,進入 Wireshark 官網(wǎng),如圖所示。
-
選擇合適的平臺進行下載
-
一直下一步安裝即可,安裝完打開Wireshark,如下:
二、HTTP介紹
HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)是用于傳輸超文本信息的協(xié)議,它是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。了解完整的HTTP請求過程有助于我們更深層次的去分析問題(尤其是網(wǎng)絡(luò)安全問題),同時也更能清楚為什么現(xiàn)在網(wǎng)站很少再用HTTP了,而改為使用更為安全的HTTPS協(xié)議。
2.1、HTTP請求過程介紹
HTTP連接本質(zhì)就是使用TCP協(xié)議建立起的可靠連接進行請求發(fā)送與請求響應(yīng)。HTTP請求過程大致可以分為五個步驟(見上圖),每個步驟細節(jié)如下:
- DNS解析:當客戶端(如瀏覽器)嘗試訪問一個網(wǎng)站時,它首先會嘗試從本地緩存中查找域名對應(yīng)的IP地址。如果本地緩存中沒有找到,客戶端會發(fā)送DNS查詢請求到本地的DNS服務(wù)器。
- ?建立TCP連接:客戶端(如瀏覽器)向服務(wù)器發(fā)起連接請求,通常使用TCP/IP協(xié)議建立一個到服務(wù)器的TCP連接。這個過程稱為三次握手(Three-way handshake),確保連接的可靠性。
- 客戶端發(fā)送請求:客戶端向服務(wù)器發(fā)送HTTP請求消息。
- ?服務(wù)端響應(yīng)請求:服務(wù)器接收到請求后,會檢查請求頭和請求體,然后根據(jù)請求方法(如GET、POST)和資源路徑來決定如何響應(yīng)。
- 釋放TCP連接:請求完成后,客戶端和服務(wù)器可以關(guān)閉連接。
2.2 、TCP協(xié)議基礎(chǔ)知識
2.2.1、概念介紹
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。TCP是互聯(lián)網(wǎng)核心協(xié)議之一,位于OSI模型的傳輸層,負責在互聯(lián)網(wǎng)上的計算機之間提供可靠的數(shù)據(jù)傳輸服務(wù)。
2.2.2、TCP協(xié)議的工作原理
TCP連接的建立與斷開,正常過程至少需要客戶端與服務(wù)端來回發(fā)送7個包(請求)才能完成。其中客戶端發(fā)送4個(1、3、4、7),服務(wù)端發(fā)送3個(2,5,6),具體原理參照下圖。
傳輸控制依賴首部包含的6個標志:
- URG:緊急指針
- ACK:確認序號是否有效
- PSH:接收方應(yīng)盡快將這個報文段交給應(yīng)用層
- RST:重建連接
- SYN:同步序號用來發(fā)起一個連接
- FIN:發(fā)送端完成發(fā)送任務(wù)
2.2.3、三次握手建立連接
TCP建立連接的過程,包括客戶端和服務(wù)器總共發(fā)送3個包,此過程稱為三次握手:
-
第一次握手:客戶端發(fā)送一個帶有SYN標志的TCP段,請求與服務(wù)器建立連接。
-
第二次握手:服務(wù)器接收到SYN請求后,發(fā)送一個帶有SYN和ACK標志的TCP段作為響應(yīng)。
-
第三次握手:客戶端接收到服務(wù)器的SYN+ACK響應(yīng)后,發(fā)送一個帶有ACK標志的TCP段,完成連接建立。
三次握手完成后便建立了TCP連接,便可進行數(shù)據(jù)傳輸,TCP負責將數(shù)據(jù)分割為多個段(Segment),并按順序發(fā)送。
?2.3.4、四次揮手斷開連接
TCP斷開連接的過程,包括客戶端和服務(wù)器總共發(fā)送4個包,此過程稱為四次揮手:
-
第一次揮手:客戶端發(fā)送一個帶有FIN標志的TCP段,請求斷開連接;
-
第二次揮手:服務(wù)器接收到FIN請求后,發(fā)送一個帶有ACK標志的TCP段作為響應(yīng);
-
第三次揮手:服務(wù)器發(fā)送一個帶有FIN標志的TCP段,請求斷開連接;
-
第四次揮手:客戶端接收到服務(wù)器的FIN請求后,發(fā)送一個帶有ACK標志的TCP段,完成連接斷開。
2.3、Wireshark抓包分析過程
①打開Wireshark工具,選擇以太網(wǎng)
因為此時捕獲的是本地網(wǎng)絡(luò),所以會有很多信息,先不管
②打開cmd窗口,以此執(zhí)行 ping www.baidu.com,然后執(zhí)行curl www.baidu.com
到這里,我們執(zhí)行的這兩條命令,Wireshark也已經(jīng)捕獲到了,
為避免其他無用的數(shù)據(jù)包影響分析,可在顯示過濾器(display filter)輸入過濾條件ip.addr== ip.addr==157.0.148.3 (來自ping返回的百度ip)
,過濾與百度發(fā)生交互的數(shù)據(jù)包:
上半部分是ping命令的數(shù)據(jù)包,不管,下面的是curl命令的數(shù)據(jù)包,我們以此來分析TCP連接的三次握手和四次揮手。
2.3.1、三次握手
前三個包完成了三次握手,建立了連接。
-
第一個包是「第一次握手」:我(192.168.1.52)向百度(157.0.148.3)發(fā)送一個 SYN ,表示這是一個「建立連接的請求」;
-
第二個包是「第二次握手」:百度(157.0.148.3)響應(yīng)我(192.168.1.52)一個 SYN+ACK ,表示這是一個「接受連接的應(yīng)答」;
-
第三個包是「第三次握手」:我(192.168.1.52)向百度(157.0.148.3)發(fā)送一個 ACK ,表示這一個「確認請求」。
發(fā)送完確認請求后,我開啟到百度的單向連接通道,百度收到我的確認請求后,就開啟到我這邊的單向連接通道,兩邊通道都開啟以后,就可以通信了。
2.3.2、發(fā)送請求
第一個HTTP協(xié)議包(序號103)執(zhí)行了HTTP 的GET請求。
客戶端向服務(wù)器發(fā)送HTTP請求消息。請求消息通常包括以下部分:
-
請求行:包含請求方法(如GET、POST)、請求的資源路徑、HTTP版本。
-
請求頭:包含客戶端信息、請求參數(shù)等,例如User-Agent、Accept、Cookie等。
-
請求體:對于某些請求方法(如POST),可能包含額外的數(shù)據(jù),用于向服務(wù)器發(fā)送信息。
點開請求行,看里面的三個字段,下圖所示:
-
Request Method:請求方法,這里的請求方法是GET;
-
Request URI:請求的URI,沒指定默認是
/
,因為我們只請求了域名www.baidu.com,并沒指定要獲取的資源,所以是默認的/
; -
Request Version:請求的版本,因為用的是HTTP協(xié)議,所以這里顯示HTTP協(xié)議的版本。
再看下面的幾個請求頭:
-
Host:目標主機;
-
User-Agent:用戶代理,也就是瀏覽器的類型。由于我們沒用瀏覽器,所以這里顯示的是命令curl,版本為8.9.1;
-
Accept:瀏覽器可接受的MIME(Multipurpose Internet Mail Extensions)類型。
瀏覽器通常使用 MIME 類型(而不是文件擴展名)來確定如何處理URL,因此 We b服務(wù)器在響應(yīng)頭中添加正確的 MIME 類型非常重要。如果配置不正確,瀏覽器可能會無法解析文件內(nèi)容,網(wǎng)站將無法正常工作,并且下載的文件也會被錯誤處理。
2.3.3、服務(wù)器響應(yīng)
第二個HTTP協(xié)議包(序號106)執(zhí)行了HTTP響應(yīng)。
?
-
狀態(tài)行:包含版本和響應(yīng)狀態(tài)碼、狀態(tài)信息;
-
響應(yīng)頭:包含響應(yīng)的服務(wù)器的資源信息,一行一個響應(yīng)頭;
-
響應(yīng)空行:用來間隔/區(qū)分響應(yīng)頭和響應(yīng)體;
-
響應(yīng)體:服務(wù)器響應(yīng)的內(nèi)容,通常是一個HTML頁面的代碼或者給客戶端的數(shù)據(jù),上圖中可以看到本次響應(yīng)的內(nèi)容是一個文件數(shù)據(jù)(File Data)。
點開狀態(tài)行,可以看到里面有三個字段:
-
Response Version:響應(yīng)版本,因為使用的是HTTP協(xié)議,所以這里顯示了HTTP的版本;
-
Status Code:響應(yīng)狀態(tài)碼,這里的 200 表示請求成功;
-
Response Phrase:響應(yīng)狀態(tài)碼的提示信息。
最后看下幾個響應(yīng)頭:
?
-
Accept-Ranges: 告知客戶端資源是否支持范圍請求。當前取值
bytes
表明資源支持范圍請求,可以使用Range頭進行請求。 -
Cache-Control: 控制緩存行為,包括是否緩存、緩存的有效期、緩存策略等。
-
Connection: 服務(wù)器是否需要保持連接。
keep-alive表示服務(wù)器希望在發(fā)送響應(yīng)后不立即關(guān)閉連接,而是保持連接狀態(tài)以供后續(xù)請求復用。這種設(shè)置可以提高服務(wù)器的響應(yīng)效率,減少TCP連接的建立和斷開的開銷,特別是在處理大量并發(fā)請求的場景下。
-
Content-Length: 響應(yīng)內(nèi)容的字節(jié)數(shù),本例是2381字節(jié)。
-
Content-Type: 響應(yīng)內(nèi)容的類型和編碼方式,text/html。
-
Date: 指示響應(yīng)消息生成的時間。
-
Etag: 資源的實體標簽(Entity Tag),用于緩存控制和驗證。
-
Last-Modified: 資源的最后修改時間
-
Pragma: 歷史遺留的HTTP頭,它最初用于緩存控制,但現(xiàn)在已不推薦使用。取值
no-cache
表明不使用緩存。 -
Server: 服務(wù)器的名稱或版本。
-
Set-Cookie: 用于設(shè)置客戶端的Cookie
當打開響應(yīng)體,會發(fā)現(xiàn)它的內(nèi)容是明文的,對于機密通信來說HTTP通信很容易產(chǎn)生信息泄露。另外,以上介紹的整個交互過程中并不驗證通信方的身份,第三方可以冒充他人身份參與通信。后續(xù)會發(fā)圖文詳解,帶你搞清楚HTTPS協(xié)議的工作機制。
2.3.4、四次揮手
最后四個包通過四次揮手斷開了連接。
-
第一個包是「第一次揮手」:我(192.168.1.52)向百度(157.0.148.3)發(fā)送一個「FIN+ACK」,表示這是一個「釋放連接」的請求;
-
第二個包是「第二次揮手」:百度(157.0.148.3)向我(192.168.1.52)響應(yīng)一個「ACK」,表示這是一個「確認請求」,我收到后,就會釋放我到百度的單向連接;
-
第三個包是「第三次揮手」:百度(157.0.148.3)向我(192.168.1.52)發(fā)送一個「FIN+ACK」,表示這是一個「釋放連接」的請求;
-
第四個包是「第四次揮手」:我(192.168.1.52)向百度(36.155.132.76)響應(yīng)一個「ACK」,表示這是一個「確認請求」,百度收到后,就會釋放到我這邊的單向連接。
?雙向的連接都釋放后,TCP連接就關(guān)閉了(對于本例來說就是百度響應(yīng)結(jié)束),此次通信結(jié)束。