1. 程式人生 > 實用技巧 >Wireshark抓包使用指南

Wireshark抓包使用指南

第一個抓包例項

  1. 開啟wireshark,主介面如下:

主介面

2. 選擇選單欄上捕獲——>選項,,取消混雜模式,勾選WLAN,開始(你也可以直接雙擊上圖的WLAN開始)

3. 此時wireshark已經開始工作,檢視抓包

4. 開啟cmd視窗,執行ping

5. 工作中的wireshark將抓取到相關資料包,在過濾欄設定過濾條件以避免其他無用資料包影響分析,比如:ip.addr == 185.199.111.153 and icmp表示只顯示ICPM協議且源主機IP或者目的主機IP為185.199.111.153的資料包。說明:協議名稱icmp要小寫

Wireshark抓包介面介紹

資料包詳細資訊

各行資訊分別為Frame: 物理層的資料幀概況Ethernet II: 資料鏈路層乙太網幀頭部資訊Internet Protocol Version 4: 網際網路層IP包頭部資訊Transmission Control Protocol: 傳輸層T的資料段頭部資訊,此處是TCP * Hypertext Transfer Protocol: 應用層的資訊,此處是HTTP協議

TCP包的具體內容

從下圖可以看到wireshark捕獲到的TCP包中的每個欄位。

wireshark過濾器表示式的規則

1、抓包過濾器語法和例項

抓包過濾器型別Type(host、net、port)、方向Dir(src、dst)、協議Proto(ether、ip、tcp、udp、http、icmp、ftp等)、邏輯運算子(&& 與、|| 或、!非)

(1)協議過濾

比較簡單,直接在抓包過濾框中直接輸入協議名即可。 tcp,只顯示TCP協議的資料包列表 http,只檢視HTTP協議的資料包列表 icmp,只顯示ICMP協議的資料包列表

(2)IP過濾

host 192.168.1.104 src host 192.168.1.104 dst host 192.168.1.104

(3)埠過濾

port 80 src port 80 dst port 80

(4)邏輯運算子&& 與、|| 或、!非

src host 192.168.1.104 && dst port 80 抓取主機地址為192.168.1.80、目的埠為80的資料包 host 192.168.1.104 || host 192.168.1.102 抓取主機為192.168.1.104或者192.168.1.102的資料包 !broadcast 不抓取廣播資料包

2、顯示過濾器語法和例項

(1)比較操作符

比較操作符有== 等於、!= 不等於、> 大於、< 小於、>= 大於等於、<=小於等於。

(2)協議過濾

比較簡單,直接在Filter框中直接輸入協議名即可。注意:協議名稱需要輸入小寫。 tcp,只顯示TCP協議的資料包列表 http,只檢視HTTP協議的資料包列表 icmp,只顯示ICMP協議的資料包列表

(3) ip過濾

ip.src ==192.168.1.104 顯示源地址為192.168.1.104的資料包列表 ip.dst==192.168.1.104, 顯示目標地址為192.168.1.104的資料包列表 ip.addr == 192.168.1.104 顯示源IP地址或目標IP地址為192.168.1.104的資料包列表

(4)埠過濾

tcp.port ==80, 顯示源主機或者目的主機埠為80的資料包列表。 tcp.srcport == 80, 只顯示TCP協議的源主機埠為80的資料包列表。 tcp.dstport == 80,只顯示TCP協議的目的主機埠為80的資料包列表。

(5) Http模式過濾

http.request.method=="GET", 只顯示HTTP GET方法的。

(6)邏輯運算子為 and/or/not

過濾多個條件組合時,使用and/or。比如獲取IP地址為192.168.1.104的ICMP資料包表示式為ip.addr == 192.168.1.104 and icmp

(7)按照資料包內容過濾。

假設我要以IMCP層中的內容進行過濾,可以單擊選中介面中的碼流,在下方進行選中資料。右鍵-->準備過濾器-->選中-->新增條件表示式,如data contains "uestc"

Wireshark分析TCP協議三次握手

TCP三次握手連線建立過程

  • 第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SENT狀態,等待伺服器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
  • 第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
  • 第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED(TCP連線成功)狀態,完成三次握手,客戶端與伺服器開始傳送資料。 {% endtabs %}

wireshark抓取訪問指定伺服器資料包

  1. 啟動wireshark抓包,開啟瀏覽器輸入www.cnblogs.com
  2. 終止抓包,輸入http過濾
  3. 隱藏其他無關http資料包,右鍵選中,追蹤流——>TCP流,顯示握手資訊,如圖所示:

可以看到這裡截獲了三個握手資料包,第四個是HTTP資料包,說明HTTP的確是使用TCP建立連線的。


第一次,客戶端傳送了一個TCP,標誌位為SYN,序列號為0,表示客戶端請求建立連線,如下:

關鍵引數

  1. SYN :標誌位,表示請求建立連線
  2. Seq = 0 :初始建立連線值為0,資料包的相對序列號從0開始,表示當前還沒有傳送資料
  3. Ack = 0:初始建立連線值為0,已經收到包的數量,表示當前沒有接收到資料

第二次,伺服器發回確認包, 標誌位為 SYN,ACK. 將確認序號(Acknowledgement Number)設定為客戶的ISN加1以.即0+1=1, 如下圖如下:

關鍵引數

  1. [SYN + ACK]: 標誌位,同意建立連線,並回送SYN+ACK
  2. Seq = 0 :初始建立值為0,表示當前還沒有傳送資料
  3. Ack = 1:表示當前端成功接收的資料位數,雖然客戶端沒有傳送任何有效資料,確認號還是被加1,因為包含SYN或FIN標誌位。(並不會對有效資料的計數產生影響,因為含有SYN或FIN標誌位的包並不攜帶有效資料)

第三次,客戶端再次傳送確認包(ACK) SYN標誌位為0,ACK標誌位為1.並且把伺服器發來ACK的序號欄位+1,放在確定欄位中傳送給對方.並且在資料段放寫ISN的+1,如下圖如下:

關鍵引數

  1. ACK :標誌位,表示已經收到記錄
  2. Seq = 1 :表示當前已經發送1個數據
  3. Ack = 1 : 表示當前端成功接收的資料位數,雖然服務端沒有傳送任何有效資料,確認號還是被加1,因為包含SYN或FIN標誌位(並不會對有效資料的計數產生影響,因為含有SYN或FIN標誌位的包並不攜帶有效資料)。

調整時間戳

View -->Time Display Format --> Date and Time of Day

Wireshark提示

Tcp previous segment lost(tcp先前的分片丟失)

Tcpacked lost segment(tcp應答丟失)

Tcp window update(tcp視窗更新)


Tcp dup ack(tcp重複應答)


Tcp keep alive(tcp保持活動)


Tcp retransmission(tcp重傳)


Tcp ACKed unseen segument (tcp看不見確認應答)


tcp port numbers reused(tcp埠重複使用)


tcp retransmission(tcp重傳)


tcp fast retransmission (tcp快速重傳)


TCPPrevioussegment lost(傳送方資料段丟失)


tcp spurious retransmission(tcp偽重傳)