WireShark學(xué)習(xí)筆記

抓包工具 Wireshark, 用來獲取網(wǎng)絡(luò)數(shù)據(jù)封包,包括 HTTP、TCP、UDP 等網(wǎng)絡(luò)協(xié)議包。

wireshark是開源軟件,可以放心使用。 可以運行在WindowsMac OS上。

wireshark只能查看封包,而不能修改封包的內(nèi)容,或者發(fā)送封包。

Wireshark VS Fiddler

Fiddler是在windows上運行的程序,專門用來捕獲HTTP,HTTPS的。

wireshark能獲取HTTP,也能獲取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的內(nèi)容。

總結(jié),如果是處理HTTP,HTTPS 還是用Fiddler,? 其他協(xié)議比如TCP,UDP 就用wireshark。

同類的其他工具微軟的network monitor,sniffer

開始抓包

wireshark是捕獲機器上的某一塊網(wǎng)卡的網(wǎng)絡(luò)包,當(dāng)你的機器上有多塊網(wǎng)卡的時候,你需要選擇一個網(wǎng)卡。

點擊Caputre->Interfaces.. 出現(xiàn)下面對話框,選擇正確的網(wǎng)卡。然后點擊”Start”按鈕, 開始抓包。

Caputre->Interfaces

WireShark 主要分為這幾個界面

1. Display Filter(顯示過濾器),? 用于過濾

2. Packet List Pane(封包列表), 顯示捕獲到的封包, 有源地址和目標(biāo)地址,端口號。 顏色不同,代表

3. Packet Details Pane(封包詳細(xì)信息), 顯示封包中的字段

4. Dissector Pane(16進制數(shù)據(jù))

5. Miscellanous(地址欄,雜項)

界面

過濾器有兩種:

一種是顯示過濾器,就是主界面上那個,用來在捕獲的記錄中找到所需要的記錄

一種是捕獲過濾器,用來過濾捕獲的封包,以免捕獲太多的記錄。 在Capture -> Capture Filters 中設(shè)置

過濾表達(dá)式的規(guī)則

表達(dá)式規(guī)則

1. 協(xié)議過濾

比如TCP,只顯示TCP協(xié)議。

2. IP 過濾

比如 ip.src ==192.168.1.102 顯示源地址為192.168.1.102,

ip.dst==192.168.1.102, 目標(biāo)地址為192.168.1.102

3. 端口過濾

tcp.port ==80,? 端口為80的

tcp.srcport == 80,? 只顯示TCP協(xié)議的愿端口為80的。

4. Http模式過濾

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

5. 邏輯運算符為 AND/ OR

封包列表(Packet List Pane)

封包列表的面板中顯示,編號,時間戳,源地址,目標(biāo)地址,協(xié)議,長度,以及封包信息。 你可以看到不同的協(xié)議用了不同的顏色顯示。

你也可以修改這些顯示顏色的規(guī)則,? View ->Coloring Rules.

封包詳細(xì)信息 (Packet Details Pane)

這個面板是我們最重要的,用來查看協(xié)議中的每一個字段。

各行信息分別為

Frame:物理層的數(shù)據(jù)幀概況

EthernetII:數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息

Internet Protocol Version 4:互聯(lián)網(wǎng)層IP包頭部信息

Transmission Control Protocol:傳輸層T的數(shù)據(jù)段頭部信息,此處是TCP

Hypertext Transfer Protocol:應(yīng)用層的信息,此處是HTTP協(xié)議

對應(yīng)七層模型


TCP包中的每個字段


TCP三次握手

TCP:

TCP/IP通過三次握手建立一個連接。這一過程中的三種報文是:SYN,SYN/ACK,ACK。

第一步是找到PC發(fā)送到網(wǎng)絡(luò)服務(wù)器的第一個SYN報文,這標(biāo)識了TCP三次握手的開始。

如果你找不到第一個SYN報文,選擇Edit -> Find Packet菜單選項。選擇Display Filter,輸入過濾條件:tcp.flags,這時會看到一個flag列表用于選擇。選擇合適的flag,tcp.flags.syn并且加上==1。點擊Find,之后trace中的第一個SYN報文就會高亮出來了。

注意:Find Packet也可以用于搜索十六進制字符,比如惡意軟件信號,或搜索字符串,比如抓包文件中的協(xié)議命令。

一個快速過濾TCP報文流的方式是在Packet List Panel中右鍵報文,并且選擇Follow TCP Stream。這就創(chuàng)建了一個只顯示TCP會話報文的自動過濾條件。

這一步驟會彈出一個會話顯示窗口,默認(rèn)情況下包含TCP會話的ASCII代碼,客戶端報文用紅色表示,服務(wù)器報文則為藍(lán)色。


HTTP

當(dāng)HTTP發(fā)送初始GET命令之后,TCP繼續(xù)數(shù)據(jù)傳輸過程,接下來的鏈接過程中HTTP會從服務(wù)器請求數(shù)據(jù)并使用TCP將數(shù)據(jù)傳回客戶端。傳送數(shù)據(jù)之前,服務(wù)器通過發(fā)送HTTP? OK消息告知客戶端請求有效。如果服務(wù)器沒有將目標(biāo)發(fā)送給客戶端的許可,將會返回403 Forbidden。如果服務(wù)器找不到客戶端所請求的目標(biāo),會返回404。

如果沒有更多數(shù)據(jù),連接可被終止,類似于TCP三次握手信號的SYN和ACK報文,這里發(fā)送的是FIN和ACK報文。當(dāng)服務(wù)器結(jié)束傳送數(shù)據(jù),就發(fā)送FIN/ACK給客戶端,此報文表示結(jié)束連接。接下來客戶端返回ACK報文并且對FIN/ACK中的序列號加1。這就從服務(wù)器端終止了通信。要結(jié)束這一過程客戶端必須重新對服務(wù)器端發(fā)起這一過程。必須在客戶端和服務(wù)器端都發(fā)起并確認(rèn)FIN/ACK過程。

基本IO Graphs:

IO graphs是一個非常好用的工具。基本的Wireshark IO

graph會顯示抓包文件中的整體流量情況,通常是以每秒為單位(報文數(shù)或字節(jié)數(shù))。默認(rèn)X軸時間間隔是1秒,Y軸是每一時間間隔的報文數(shù)。如果想要查看每秒bit數(shù)或byte數(shù),點擊“Unit”,在“Y

Axis”下拉列表中選擇想要查看的內(nèi)容。這是一種基本的應(yīng)用,對于查看流量中的波峰/波谷很有幫助。要進一步查看,點擊圖形中的任意點就會看到報文的細(xì)節(jié)。

過濾:

每一個圖形都可以應(yīng)用一個過濾條件。這里創(chuàng)建兩個不同的graph,一個HTTP一個ICMP。可以看到過濾條件中Graph 1使用“http”Graph 2使用“icmp”。圖中可以看到紅色I(xiàn)CMP流量中有些間隙,進一步分析。

過濾

常用排錯過濾條件:

對于排查網(wǎng)絡(luò)延時/應(yīng)用問題有一些過濾條件是非常有用的:

tcp.analysis.lost_segment:表明已經(jīng)在抓包中看到不連續(xù)的序列號。報文丟失會造成重復(fù)的ACK,這會導(dǎo)致重傳。

tcp.analysis.duplicate_ack:顯示被確認(rèn)過不止一次的報文。大涼的重復(fù)ACK是TCP端點之間高延時的跡象。

tcp.analysis.retransmission:顯示抓包中的所有重傳。如果重傳次數(shù)不多的話還是正常的,過多重傳可能有問題。這通常意味著應(yīng)用性能緩慢和/或用戶報文丟失。

tcp.analysis.window_update:將傳輸過程中的TCP window大小圖形化。如果看到窗口大小下降為零,這意味著發(fā)送方已經(jīng)退出了,并等待接收方確認(rèn)所有已傳送數(shù)據(jù)。這可能表明接收端已經(jīng)不堪重負(fù)了。

tcp.analysis.bytes_in_flight:某一時間點網(wǎng)絡(luò)上未確認(rèn)字節(jié)數(shù)。未確認(rèn)字節(jié)數(shù)不能超過你的TCP窗口大小(定義于最初3此TCP握手),為了最大化吞吐量你想要獲得盡可能接近TCP窗口大小。如果看到連續(xù)低于TCP窗口大小,可能意味著報文丟失或路徑上其他影響吞吐量的問題。

tcp.analysis.ack_rtt:衡量抓取的TCP報文與相應(yīng)的ACK。如果這一時間間隔比較長那可能表示某種類型的網(wǎng)絡(luò)延時(報文丟失,擁塞,等等)。

函數(shù):

IO Graphs有六個可用函數(shù):SUM,?MIN, AVG, MAX, COUNT, LOAD。

MIN( ), AVG( ), MAX( )

首先看一下幀之間的最小,平均和最大時間,這對于查看幀/報文之間的延時非常有用。我們可以將這些函數(shù)結(jié)合“frame.time_delta過濾條件看清楚幀延時,并使得往返延時更為明顯。如果抓包文件中包含不同主機之間的多個會話,而只想知道其中一個pair,可將“frame.time_delta”結(jié)合源和目標(biāo)主機條件如“ip.addr==x.x.x.x &&ip.addr==y.y.y.y”。如下圖所示:

函數(shù)

我們做了以下步驟:

將Y軸設(shè)置為“Advanced”,讓Caculation域可見。不做這一步就看不到計算選項。

X軸時間間隔1秒,所以每個柱狀圖代表1秒間隔的計算結(jié)果。

過濾出兩個特定IP地址的HTTP會話,使用條件:“(ip.addr==192.168.1.4&&?ip.addr==128.173.87.169) && http”。

使用3個不同的graph,分別計算Min(), Avg(), Max()。

對每一個計算結(jié)果應(yīng)用條件“frame.time_delta”,將style設(shè)置成“FBar”,顯示效果最佳。

Count( ):此函數(shù)計算時間間隔內(nèi)事件發(fā)生的次數(shù),在查看TCP分析標(biāo)識符時很有用,例如重傳。

Sum( ):該函數(shù)統(tǒng)計事件的累加值。有兩種常見的用例是看在捕獲TCP數(shù)據(jù)量,以及檢查TCP序列號。

協(xié)議過濾器:

arp:顯示所有包括ARP請求和回復(fù)在內(nèi)的所有ARP數(shù)據(jù)流。

ip:顯示內(nèi)含IPv4頭在內(nèi)的(如ICMP目的地址不可達(dá)報文,在ICMP報文頭之后返回到來方向的IPv4頭)IP數(shù)據(jù)流。

ipv6:顯示所有IPv6數(shù)據(jù)流,包括內(nèi)含IPv6報文頭的IPv4報文,如6to4,Teredo,以及ISATAP數(shù)據(jù)流。

tcp:顯示所有基于TCP的數(shù)據(jù)流。

應(yīng)用過濾器:

bootp:顯示所有DHCP數(shù)據(jù)流(基于BOOTP)。

dns:顯示包括TCP區(qū)域傳輸以及基于標(biāo)準(zhǔn)UDP的DNS請求和回復(fù)在內(nèi)的所有DNS數(shù)據(jù)流。

tftp:顯示所有TFTP(Trivial File Transfer Protocol)數(shù)據(jù)流。

http:顯示所有HTTP命令,回復(fù)以及數(shù)據(jù)傳輸報文,但不顯示TCP握手報文,TCP ACK報文以及TCP結(jié)束報文。

icmp:顯示所有ICMP報文。

域過濾器:

boot.option.hostname:顯示所有包含主機名的DHCP數(shù)據(jù)流(DHCP基于BOOTP)。

http:host:顯示所有包含HTTP主機名字段的所有HTTP報文。此報文是客戶端向網(wǎng)絡(luò)服務(wù)器發(fā)送請求時發(fā)出的。

ftp.request.command:顯示所有包含命令的FTP數(shù)據(jù)流,比如USER,PASS,或RETR命令。

字符過濾器:

tcp.analysis.flags:顯示所有包含TCP分析標(biāo)識的所有報文,包括報文丟失,重傳,或零窗口標(biāo)識。

tcp.analysis,zero_window:顯示含有表明發(fā)送方的接收緩存用完標(biāo)識的報文。

顯示過濾器比較運算符:

通過擴展過濾條件可查找某一域值,Wireshark針對此功能支持?jǐn)?shù)字比較運算符。

1. ==或eq

例如:ip.src == 10.2.2.2

顯示所有源地址為10.2.2.2的IPv4數(shù)據(jù)流

2. !=或ne

例如:tcp.srcport != 80

顯示源端口除了80以外的所有TCP數(shù)據(jù)流

3. >或gt

例如:frame.time_relative > 1

顯示距前一個報文到達(dá)時間相差1秒的報文

4. <或lt

例如:tcp.window_size < 1460

顯示當(dāng)TCP接收窗口小于1460字節(jié)時的報文

5. >=或ge

例如:dns.count.answers >= 10

顯示包含10個以上answer的DNS響應(yīng)報文

6. <=或le

例如:ip.ttl <= 10

顯示IP報文中Time to Live字段小于等于10的報文

7. contains

例如:http contains “GET”

顯示所有HTTP客戶端發(fā)送給HTTP服務(wù)器的GET請求

對于基于TCP應(yīng)用的過濾條件采用比較運算符。例如,如果想看端口80上面的HTTP數(shù)據(jù)流,使用HTTP.port==80。

小貼士:

運算符兩邊不用留空格。ip.src == 10.2.2.2與ip.src==10.2.2.2的效果是相同的。

過濾HTTP數(shù)據(jù)流:

在排查網(wǎng)頁瀏覽器會話或檢查網(wǎng)速過慢問題時,對瀏覽器會話進行過濾就顯得尤為重要。過濾HTTP數(shù)據(jù)流有兩種方式:

http

tcp.port==xx(xx表示所使用的HTTP端口)

第二種過濾方法更加有效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容