1. 程式人生 > >寒假無聊 開啟小專案 http伺服器之一http抓包分析

寒假無聊 開啟小專案 http伺服器之一http抓包分析

目錄

實驗環境及工具

ubuntu 虛擬機器
wireshark

實驗開始

tcp 格式分析

虛擬機器使用的是NAT 模式 ,開機後開啟apache2 服務, 物理機啟動wireshark 並繫結vmnet 8 ,物理機訪問虛擬機器80埠,
在這裡插入圖片描述

呃 , 看到這麼多包,頭有點大 , 我們先從頭開始,首先http協議的傳輸層使用TCP協議 , 先來看TCP包的格式。 參考部落格,感謝這位大佬的部落格貼的他的圖,問了沒回我。。要是不同意的話,我再換下來。

在這裡插入圖片描述
這幅圖 ,對tcp協議有個簡單的回顧。TCP 是面向流(資料有順序)、可靠的傳輸協議,

源埠地址 : 一個16位欄位, 定義了傳送這個報文段的主機中應用程式的埠號 。

目的埠號 : 16位欄位 , 定義了接收這個報文段的主機中應用程式的埠號 。

序號 : 32位欄位 , 定義了指派給本報文段第一個資料位元組 的編號 。 Tcp 是 流運輸協議 ,為了保證連線性, 要傳送的每一個位元組都要編上號 。 序號 可以告訴終點, 報文段中的第一個位元組是這個序號的哪一個位元組。在連線建立時, 雙方使用各自的隨機數產生器產生一個初始序號(init sequence number)。通常,兩個方向上的ISN是不同的。

確認號 : 32位欄位, 定義了報文段的接收方期望從對方接收的位元組編號。如果報文段的接收方成功地接收了對方發來的編號為x的位元組。那麼它就返回x+1作為確認號。確認可以和資料捎帶一起傳送。

首部長度 HLEN : 4位欄位, (1~15)指出Tcp首部一共有多少個4位元組字。

保留 : 6位欄位, 保留今後使用。

控制 : 該6位欄位定義了6種不同的控制位或標誌, 同一時間可設定一位或多為標誌。 這些標誌用在tcp流量控制,連線建立,和終止,連線異常終止,及資料傳送方式等方面。
URG :緊急至真有效 RST : 連線復位 ACK : 確認是有效的 SYN:同步序號 PSH:請求推送 FIN:終止連線

視窗大小:16位欄位, 定義了傳送Tcp視窗的大小,以位元組位單位,16位,意味著視窗最大長度是65535位元組。通常被稱為接收視窗,並有接收方來決定。此情況下,傳送方必須服從街上方的指示。

檢驗和 : 16位欄位。檢驗和是強制性的。

緊急指標 :只有緊急標誌位置位時,此欄位才生效,此時報文段中包含了緊急資料。

選項:在Tcp首部中可以有多達40位元組的可選資訊。

tcp 三次握手

在這裡插入圖片描述

tcp抓包分析

知道這些後可以來看抓包分析了,
在這裡插入圖片描述
發現並不單純 ,最外層是個mac幀,內部還有個ip層 , 出去紅框和黃線,最後才是tcp資料。這裡不對IP資料包和mac幀進行描述。重要的是:源目地埠60257(eb61)、80(0050) 、SYN=1、序號 0x24148920 ,再看服務端迴應
在這裡插入圖片描述

源目地埠交換,80 , 60257 ,SYN=1 , ACK=1 確認序號為0x24148921 .,序號為0x43448e42 。
最後一次握手
最後一次握手 源目地埠交換 , ACK=1 , 序號0x24148921 , 確認號0x43448e43 , 完成TCP連線。
做完以後發現tcp 三次握手原來也比較簡單, 可能是擁塞控制等機制比較複雜吧,

http抓包分析

來看握手成功後的第一個http資料包
在這裡插入圖片描述

返回對該包的確認
在這裡插入圖片描述

響應請求
在這裡插入圖片描述

在這裡插入圖片描述

http格式分析

參考部落格

http 請求

http請求

請求行

用來說明請求型別、 訪問資源和http版本
如圖,請求方式 get , http 版本1.1

請求頭部

說明服務附加資訊
host = 192.168.149.142
…等等

空行

空行是必須的

請求資料

這裡是空的

http 響應

HTTP響應也由四個部分組成,分別是:狀態行、訊息報頭、空行和響應正文。
http響應

狀態頭

版本和狀態
http/1.1 返回狀態200 ,ok

訊息報頭

用來說明客戶端要使用的一些附加資訊
Date : 生成響應的日期和時間
Content-type;charset : 響應的型別和響應的編碼
。。。。。等等

空行(必須的)

響應正文

這個就是資料部分