應(yīng)用Wireshark顯示過濾器分析特定數(shù)據(jù)流(下)[轉(zhuǎn)]

如果看了這個你還是不會用Wireshark,那就去殺了她吧,地址EMC中文支持論壇https://community.emc.com/go/chinese


介紹

掌握顯示過濾器對于網(wǎng)絡(luò)分析者來說是一項必備的技能。這是一項大海撈針的技巧。學(xué)會構(gòu)建,編輯,保存關(guān)鍵的顯示過濾器能夠節(jié)省數(shù)小時的時間。

與捕捉過濾器使用的BPF語法不同,顯示過濾器使用的是Wireshark特定的格式。除了某些特例之外,Wireshark顯示過濾器和捕捉過濾器有很大的區(qū)別。

更多信息

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

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

http

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

第二種過濾方法更加有效。讓我們通過分別對網(wǎng)頁瀏覽會話應(yīng)用兩個過濾條件來比較一下:

基于****TCP端口號的應(yīng)用過濾

本例中的抓包文件包含與網(wǎng)站www.wireshark.org的鏈接以及請求下載Wireshark的請求。我們使用tcp.port==80的顯示過濾器并且發(fā)現(xiàn),確實,所有報文都符合條件,如下圖所示。很好這就是我們想要的結(jié)果。

我們仔細看報文20的Protocol列,Wireshark并沒有在報文中看到任何HTTP命令或回復(fù),因此HTTP協(xié)議分析器沒有被應(yīng)用于此報文。它只是一個TCP報文(TCP ACK, FIN, RST,以及三路TCP握手信號都列成TCP)。

如果你想要查看TCP連接建立,維護以及關(guān)閉報文,就應(yīng)該使用上述過濾條件(并且你會一直看到這些TCP報文)。

謹慎使用基于****TCP的應(yīng)用名過濾

現(xiàn)在來看一下對數(shù)據(jù)流應(yīng)用http過濾條件的情況。下圖中,你會看到Wireshark顯示了13,353個報文。這些是Protocol列中包含HTTP的報文。

這是整個網(wǎng)站瀏覽會話的一部分,使用HTTP過濾條件我們無法檢測出TCP錯誤,對于應(yīng)用永遠是使用端口號過濾器優(yōu)于TCP。

小貼士:

不幸的是,Wireshark對于HTTP數(shù)據(jù)流的缺省過濾是http。可以考慮將缺省對HTTP數(shù)據(jù)流的過濾改為基于端口號。

按照某一****IP地址或主機過濾報文

對于IPv4數(shù)據(jù)流,我們使用字段名ip.src,ip.dst,ip.addr;對于IPv6數(shù)據(jù)流,使用ipv6.src,ipv6.dst,ipv6.host以及ipv6.addr。注意當你在Packet Details面板中點擊IP地址時,將會看到它們被稱為:ip.src,ip.dst, ipv6.src或ipv6.dst。字段名ip.host和ipv6.host,ip.addr以及ipv6.addr不在報文里。

ip.host和ipv6.host過濾條件在IPv4/IPv6源和目的地址字段查找解析為指定主機名的IPv4或IPv6地址。ip.addr==[address]和ipv6.addr==[address]過濾條件在IPv4/IPv6源和目的地址字段查找指定IPv4/IPv6地址。

  • 例如:ip.addr==10.3.1.1

顯示在IP源地址字段或IP目的地址字段包含10.3.1.1的幀。

  • 例如:!ip.addr==10.3.1.1

顯示除了在IP源地址字段或IP目的地址字段包含10.3.1.1以外的幀。

  • 例如:ipv6.addr==2406:da00:ff00::6b16:f02d

顯示以2406:da00:ff00::6b16:f02d為源地址或目的地址的幀。

  • 例如:ip.src==10.3.1.1

顯示所有來自10.3.1.1的數(shù)據(jù)流。

  • 例如:ip.dst==10.3.1.1

顯示所有發(fā)往10.3.1.1的數(shù)據(jù)流

顯示所有解析為www.wireshark.org的IP地址。

按照某一****IP地址范圍過濾報文

可以使用>或<比較運算符或邏輯運算符&&查找某一地址范圍內(nèi)的報文。

  • 例如:ip.addr>10.3.0.1&&ip.addr<10.3.0.5

顯示來自或發(fā)往10.3.0.2,10.3.0.3,10.3.0.4的數(shù)據(jù)流。

  • 例如:(ip.addr>=10.3.0.1&&ip.addr<=10.3.0.6)&&!ip.addr==10.3.0.3

顯示來自或發(fā)往10.3.0.1,10.3.0.2,10.3.0.4,10.3.0.5,10.3.0.6的數(shù)據(jù)流,10.3.0.3排除在外。

  • ipv6.addr>=fe80::&&ipv6.addr<fec0::

顯示IPv6地址從0xfe80到0xfec0開頭的數(shù)據(jù)流。

按照某一****IP子網(wǎng)過濾報文

可以通過ip.addr字段名定義一個子網(wǎng)。這種格式使用IP地址后跟斜杠以及一個后綴,表明IP地址中定義的網(wǎng)絡(luò)部分的比特數(shù)。

  • 例如:ip.addr==10.3.0.0/16

顯示在IP源地址或目的地址字段以10.3開頭的數(shù)據(jù)流。

  • 例如:ip.addr==10.3.0.0/16 && !ip.addr==10.3.1.1

顯示除了10.3.1.1以外,在IP源地址或目的地址字段以10.3開頭的數(shù)據(jù)流。

  • 例如:!ip.addr==10.3.0.0/16 && !ip.addr==10.2.0.0/16

顯示所有數(shù)據(jù)流,除了在IP源地址或目的地址字段以10.3和10.2開頭的數(shù)據(jù)流.

使用右鍵****|作為過濾條件

如下圖所示:在某一幀的Packet Details面板,擴展HTTP部分,右鍵Request URI一行,選擇Apply as Filter | Selected

Wireshark會創(chuàng)建合適的顯示過濾條件(http.request.rui==”/”)并應(yīng)用于抓包文件。之后過濾得到2個報文,顯示用戶從兩個不同的IP地址訪問主頁內(nèi)容,如下圖所示。

如果你想排除這類HTTP請求,只要在過濾條件前加!或not。你可以通過右鍵GET請求并選擇Apply as Filter | Not Selected。

not http.request.uri==”/”

如果你感興趣的是其余HTTP GET請求,可對上述過濾條件擴展:定位在一個HTTP GET請求報文,擴展HTTP部分,右鍵GET并選擇Apply as Filter,這一次選擇and Selected選項。之后,顯示過濾器顯示如下:

(not http.request.uri==”/”)&&(http.request.method==“GET”)。

現(xiàn)在可以看到除了default page request(/)之外的所有HTTP GET請求。

過濾單個****TCP或UDP會話

當你想要觀察客戶端應(yīng)用于服務(wù)器進程之間的通訊,你需要查找的是一個“會話“。會話是基于客戶端應(yīng)用和服務(wù)器進程的IP地址和端口號。通常抓包文件中會包含數(shù)百個會話,了解如何快速定位及過濾無疑是很有幫助的。

以下兩種常用方式可從抓包文件中提取單一TCP或UDP會話:

  • 通過在Packet List面板右鍵一個TCP或UDP報文并選擇Conversation Filter | [TCP|UDP].
  • 通過在Packet List面板右鍵一個TCP或UDP報文并選擇Follow [TCP|UDP] Stream。

右鍵選擇****Conversation Filter

通過在Packet List面板右鍵一個TCP或UDP報文并選擇Conversation Filter | TCP,如下圖所示:

Wireshark對數(shù)據(jù)流創(chuàng)建并應(yīng)用以下過濾條件:

(ip.addr eq 24.6.173.220 and ip.addr eq 184.84.222.48) and (tcp.port eq 19953 and tcp.port eq 80)。

同樣的方法可應(yīng)用于基于IP地址,以太網(wǎng)地址,UDP地址/端口號結(jié)合的會話。

右鍵選擇****Follow a Stream

要查看應(yīng)用命令以及會話中的交換數(shù)據(jù),通過在Packet List面板右鍵一個TCP或UDP報文并選擇Follow [TCP|UDP] Stream,如下圖所示。如果選擇Follow UDP Stream,顯示過濾條件會基于IP地址和端口號。如果選擇Follow TCP Stream, 顯示過濾條件會基于TCP Stream Index number。

錯誤的用法導(dǎo)致不****work

錯誤:ip.addr != 10.2.2.2

顯示在IP源地址IP目的地址不包含10.2.2.2的報文。只要在源或目的IP地址不為10.2.2.2,報文就會被顯示出來。這時隱含的會導(dǎo)致實際上并未過濾任何報文。

正確:!ip.addr == 10.2.2.2

顯示IP源地址和IP目的地址都不包含10.2.2.2的報文。

錯誤:!tcp.flags.syn==1

顯示所有不含TCP SYN bit設(shè)置為1的報文。其他協(xié)議報文,必須UDP和ARP報文也符合這一過濾條件,因為它們的TCP SYN bit沒有設(shè)置為1。

正確:tcp.flags.syn!=1

只顯示包含SYN設(shè)置為0的TCP報文。

小貼士:

當你知道只有一個字段符合你的過濾字段名的時候,不要害怕使用!=運算符。有時,這是最好用的過濾運算符。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容