Wireshark數(shù)據(jù)包分析三板斧
引言
Wireshark是IT技術(shù)人員必備大殺器,Wireshark分析數(shù)據(jù)包的能力十分強大,能夠分析IT界的各種數(shù)據(jù)包。 本運維老狗利用和業(yè)務(wù)同學(xué)撕逼的空隙,總結(jié)了Wireshark數(shù)據(jù)包分析三板斧。
咱們以理服人,通過數(shù)據(jù)包的分析來證明系統(tǒng)沒問題、網(wǎng)絡(luò)沒問題。每板斧都能砍透甩鍋同學(xué)的腦門,讓撕逼從此優(yōu)雅從容。
好了,廢話不多說,下面來展示三板斧。
第一板斧:參數(shù)設(shè)置功能使用
Wireshark默認(rèn)的參數(shù)設(shè)置能夠滿足絕大多數(shù)的場景需求,但是咱們不能滿足于此對吧,下面第一板斧介紹一些參數(shù)優(yōu)化設(shè)置,讓數(shù)據(jù)分析更深入。
1.協(xié)議參數(shù)的優(yōu)化

A.相對序列號:系統(tǒng)默認(rèn)使用相對序列號是為了在分析會話時,易讀易看。
但這也會同學(xué)們帶來困惑:序列號不是由隨機生成的32bit數(shù)值作為初始值么,技術(shù)書中都是這么說的,怎么看到seq都是從1開始的呢?
咱們這里可以可通過去掉勾選,看到真實的序列號,達到書中的效果。
B.計算會話時間戳:開啟后會顯示首幀距此幀,上一幀距此幀的時間間隔。適用于排查業(yè)務(wù)超時類故障。

2.顯示時間的調(diào)整
A.不同的同學(xué)可根據(jù)自己的閱讀習(xí)慣具體調(diào)整每幀顯示的時間格式及時間精度。

B.設(shè)置參考時間,將某幀設(shè)置為參考時間,后續(xù)的幀以此幀為基準(zhǔn)時間。適用于排查業(yè)務(wù)超時類故障。

第二板斧:查找數(shù)據(jù)包、顯示過濾器
Wireshark的功能強大的原因之一就是因為它有豐富的過濾條件表達式,能夠準(zhǔn)確過濾和分析出想要的數(shù)據(jù)信息。下面就第二板斧做詳細介紹。
1.查找數(shù)據(jù)包
該模塊只顯示分組,并不進行過濾。點擊"放大鏡"按鈕,出現(xiàn)顯示過濾器的下拉框,下面給同學(xué)們展示下拉框中的四種過濾條件。
A."顯示過濾器":查找包含符合過濾規(guī)則的幀。具體過濾條件在捕獲過濾器中介紹。

B."十六進制":查找包含相應(yīng)十六進制的幀。比如查找MAC地址。

C."字符串":查找包含相應(yīng)字符串的幀。比如在報文中查找域名。

D."正則表達式":查找包含相應(yīng)正則表達式的幀。正則表達式的詳細用法,這里不做介紹,有興趣的同學(xué)可移步百度自行學(xué)習(xí)。

E.標(biāo)記數(shù)據(jù)包:對特定數(shù)據(jù)包進行標(biāo)記。
下圖中使用黑底白字標(biāo)記了2233和2236兩幀,方便在整個數(shù)據(jù)包查找。

同時,標(biāo)記的數(shù)據(jù)包可以進行具體導(dǎo)出。也可導(dǎo)出兩標(biāo)記之間的數(shù)據(jù)包。如下圖所示。

2.顯示過濾器
顯示過濾器會過濾出來符合條件的數(shù)據(jù)包,并加以顯示。為了讓同學(xué)們更好的掌握顯示過濾器的用法,下面按照TCP/IP層級模型歸類了常用的過濾器。
A.以太網(wǎng)過濾器
- eth.addr == e8:fc:af:f7:7e:35 #顯示指定MAC地址的數(shù)據(jù)幀
- eth.src == e8:fc:af:f7:7e:35 #顯示指定源MAC地址的數(shù)據(jù)幀
- eth.dst == e8:fc:af:f7:7e:35 #顯示指定目的MAC地址的數(shù)據(jù)幀
- eth.type == 0x0800 #顯示指定類型(這里顯示TCP)的幀
B.IP過濾器
- ip #顯示網(wǎng)絡(luò)層為IP類型的數(shù)據(jù)包
- ip.addr = 192.168.0.1 #顯示包含指定IP地址的數(shù)據(jù)包
- ip.src == 192.168.0.1 #顯示包含指定源IP地址的數(shù)據(jù)包
- ip.dst == 192.168.0.1 #顯示包含指定目的IP地址的數(shù)據(jù)包
- ip.len == 40 #顯示包含指定長度(IP首部+數(shù)據(jù)部分)的IP數(shù)據(jù)包
C.傳輸層過濾器
- tcp #顯示網(wǎng)絡(luò)層為IP類型的數(shù)據(jù)包
- tcp.port == 80 #顯示指定TCP端口的數(shù)據(jù)包
- tcp.src == 80 #顯示指定TCP端口的數(shù)據(jù)包
- tcp.dst == 80 #顯示指定TCP端口的數(shù)據(jù)包
- tcp.analysis.retransmission #顯示TCP重傳數(shù)據(jù)包
- tcp.analysis.duplicate_ack #顯示TCP重復(fù)確認(rèn)數(shù)據(jù)包
- tcp.analysis.zero_window #顯示包含零窗口通告信息的TCP數(shù)據(jù)包
- tcp.connection.syn #顯示TCP會話第一個包
- tcp.connection.rst #顯示TCP會話的RST包
- tcp.flags.syn ==1 #顯示TCP會話中SYN置位的包
- tcp.flags.reset ==1 #顯示TCP會話中RST置位的包
- tcp.window_size < 100 #顯示TCP窗口小于指定大小的包
- tcp.stream eq 10 #顯示特定TCP流
- tcp.len == 20 #顯示包含指定長度(TCP中的數(shù)據(jù)部分的長度)的TCP數(shù)據(jù)包
D.應(yīng)用層過濾(以HTTP為例)
- http contains "XXXXX" #顯示HTTP包中包含指定內(nèi)容的數(shù)據(jù)包
- http.request.uri contains "XXXXX" #顯示HTTP請求包中包含指定內(nèi)容的數(shù)據(jù)包
- http.time >=0.1 #顯示HTTP響應(yīng)時間大于等于指定時間的數(shù)據(jù)包
- http.request #顯示HTTP請求數(shù)據(jù)包
- http.respone #顯示HTTP應(yīng)答數(shù)據(jù)包
- http.response.code == 404 #顯示代碼為404的HTTP響應(yīng)數(shù)據(jù)包
- http.content_length < 10 #顯示HTTP的內(nèi)容長度小于指定長度的數(shù)據(jù)包
- E.按時間過濾
- frame.time == "May 27, 2019 15:23:57.932344000"
- #顯示特定時間的數(shù)據(jù)包
- frame.time >= "May 27, 2019 15:23:57.0" && frame.time < "May 27, 2019 15:23:58.0"
- #顯示時間間隔的數(shù)據(jù)包
F.比較運算符
上面介紹了過濾器多用的是"==",其實還可以擴展,使用以下運算符。
- eq 或 == #等于
- ne 或 != #不等于
- gt 或 > #大于
- lt 或 < #小于
- ge 或 >= #大于等于
- le 或 <= #小于等于
第三板斧:統(tǒng)計與專家信息
前面兩板斧都屬于精準(zhǔn)定位,是在有明確目標(biāo)的情況下進行的。比如說咱們知道TCP有重傳問題,咱們就用過濾器過濾出現(xiàn)RST包進行分析。
第三板斧屬于整體的分析,通過統(tǒng)計和專家信息來判斷數(shù)據(jù)包存在哪方面的問題,然后再用前兩板斧進行精細診斷。
下面咱們具體學(xué)習(xí)第三板斧的使用。
1. 統(tǒng)計->已解析地址
如果咱們排查的是和公網(wǎng)通信的問題,可通過"已解析地址"查看地址對應(yīng)的域名情況。

2.統(tǒng)計->對話
通過"對話"查找會話兩端的IP地址,并可進行數(shù)據(jù)包的統(tǒng)計,確定不同會話的通信量。

3. 統(tǒng)計->I/O圖表
通過"I/O圖表"可以判斷出數(shù)據(jù)包中整個會話周期或者特定時間段內(nèi)的數(shù)據(jù)包情況,比如默認(rèn)定義的數(shù)據(jù)包量的情況、錯報的情況。也可自定義查詢條件,個性化分析,比如下圖就自定義了TCP重置的情況(下圖紅線部分)。

4. 統(tǒng)計->流量圖
"流量圖"可查看會話的流量情況。特別適合分析丟包、重傳、重復(fù)ACK等情況。

5. 統(tǒng)計->HTTP->分組計數(shù)器
"分組計數(shù)器"可展示HTTP應(yīng)答的情況,并進行數(shù)量統(tǒng)計。比如說200 OK的數(shù)量,404的數(shù)量等。非常直觀的就能看到HTTP會話的應(yīng)答情況。

6. 統(tǒng)計->TCP流圖形
通過"TCP流圖形"可以判斷出數(shù)據(jù)包中整個會話周期或者特定時間段內(nèi)會話的吞吐量、往返時間、窗口尺寸等情況。
下圖展示了窗口尺寸,能夠直觀的看出在會話周期內(nèi)接收窗口的大小和發(fā)出字節(jié)之間的變化情況。

7.定位TCP流
我們在分析數(shù)據(jù)包時,找到了有問題的一幀,想看看此幀所屬的TCP流的情況。鼠標(biāo)落在此幀上右擊,找到"追蹤流",選中"TCP流"即可過濾出此幀所屬的TCP會話。

8.分析->專家信息
通過調(diào)試"專家信息",可展示出數(shù)據(jù)包所有分組的問題,并自動進行問題分級,便于查看數(shù)據(jù)包的錯誤情況。
找到相應(yīng)的錯誤后,右擊"作為過濾器應(yīng)用"->"選中",即可過濾出該類型的所有數(shù)據(jù)包。下圖過濾出了重復(fù)序列號的所有數(shù)據(jù)包。

總結(jié)
通過三板斧的學(xué)習(xí),同學(xué)們一定迫不及待的想小試牛刀了吧。但又有同學(xué)會發(fā)現(xiàn)三板斧拿到手了,但TCPIP的原理不太精通,不知道如何使用好斧頭。