1. 程式人生 > >一站式學習Wireshark(九):應用Wireshark顯示過濾器分析特定資料流(上)

一站式學習Wireshark(九):應用Wireshark顯示過濾器分析特定資料流(上)

介紹

掌握顯示過濾器對於網路分析者來說是一項必備的技能。這是一項大海撈針的技巧。學會構建,編輯,儲存關鍵的顯示過濾器能夠節省數小時的時間。

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

更多資訊

最簡單的過濾器語法:

最簡單的顯示過濾器可基於協議,應用,域名,或字元,對大小寫敏感。絕大多數簡單的顯示過濾器由小寫字母組成。

協議過濾器:

  • arp:顯示所有包括ARP請求和回覆在內的所有ARP資料流。
  •  ip:顯示內含IPv4頭在內的(如ICMP目的地址不可達報文,在ICMP報文頭之後返回到來方向的IPv4頭)IP資料流。
  • ipv6:顯示所有IPv6資料流,包括內含IPv6報文頭的IPv4報文,如6to4,Teredo,以及ISATAP資料流。
  • tcp:顯示所有基於TCP的資料流。

應用過濾器:

  • bootp:顯示所有DHCP資料流(基於BOOTP)。
  • dns:顯示包括TCP區域傳輸以及基於標準UDP的DNS請求和回覆在內的所有DNS資料流。
  • tftp:顯示所有TFTP(Trivial File Transfer Protocol)資料流。
  • http:顯示所有HTTP命令,回覆以及資料傳輸報文,但不顯示TCP握手報文,TCP ACK報文以及TCP結束報文。
  • icmp:顯示所有ICMP報文。

域過濾器:

  • boot.option.hostname:顯示所有包含主機名的DHCP資料流(DHCP基於BOOTP)。
  • http:host:顯示所有包含HTTP主機名欄位的所有HTTP報文。此報文是客戶端向網路伺服器傳送請求時發出的。
  • ftp.request.command:顯示所有包含命令的FTP資料流,比如USER,PASS,或RETR命令。

字元過濾器:

  • tcp.analysis.flags:顯示所有包含TCP分析標識的所有報文,包括報文丟失,重傳,或零視窗標識。
  • tcp.analysis,zero_window:顯示含有表明傳送方的接收快取用完標識的報文。

瞭解欄位名:

很多顯示過濾器都是基於欄位名(例如http.host)。要了解欄位名,在Packet list面板選中欄位檢視Status條,如下圖所示。

image002
本例中,我們在Packet Display面板中選中第10幀,然後在Packet Details面板中展開HTTP報文頭。之後在報文的HTTP段點選Request Method行,狀態條表明這一欄位稱為http.request.method。

我們在顯示過濾器區域輸入http.request.method以顯示所有包含這一欄位的報文。如下圖所示,注意到Status條表明此抓包檔案包含2011個報文只有101個報文符合過濾條件。

image003
這是一個很好用的過濾器,以確定HTTP客戶端請求了哪些內容。網路伺服器不傳送HTTP request method,它們傳送HTTP響應程式碼。

使用自動完成功能:

當你在過濾器區域輸入http.request.method的時候,Wireshark開啟一個視窗讓你遍歷過濾器選項。當你輸入http.(包括點號),你會看到所有可能的以此為開頭的顯示過濾條件列表。繼續輸入http.request. ,會看到以這一短語為開頭的過濾條件,如下圖所示:

image004
可以使用這一自動完成功能檢視所有可用的過濾條件。例如,輸入tcp. ,Wireshark會列出所有可用的TCP過濾條件。如果輸入tcp.analysis. ,Wireshark會列出所有處理TCP問題與效能的TCP analysis過濾條件,如下圖:

image005

顯示過濾器比較運算子:

通過擴充套件過濾條件可查詢某一域值,Wireshark針對此功能支援數字比較運算子。
1. ==或eq
例如:ip.src == 10.2.2.2
顯示所有源地址為10.2.2.2的IPv4資料流
2. !=或ne
例如:tcp.srcport != 80
顯示源埠除了80以外的所有TCP資料流
3. >或gt
例如:frame.time_relative > 1
顯示距前一個報文到達時間相差1秒的報文
4. <或lt
例如:tcp.window_size < 1460
顯示當TCP接收視窗小於1460位元組時的報文
5. >=或ge
例如:dns.count.answers >= 10
顯示包含10個以上answer的DNS響應報文
6. <=或le
例如:ip.ttl <= 10
顯示IP報文中Time to Live欄位小於等於10的報文
7. contains
例如:http contains “GET”
顯示所有HTTP客戶端傳送給HTTP伺服器的GET請求

對於基於TCP應用的過濾條件採用比較運算子。例如,如果想看埠80上面的HTTP資料流,使用HTTP.port==80。

小貼士:

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

使用Expressions:

當你實在不知道該過濾些什麼的時候,使用顯示過濾器工具欄的Expression按鈕。在Filter Expression視窗,輸入感興趣的應用或協議名,跳轉到Field Name列表中相應條目。Relation選項用來新增一個比較運算子,視窗右端是預先定義的值。點選Apply按鈕完成。

image006

編輯和使用預設過濾器:

Wireshark提供15個預設顯示過濾器供建立新的顯示過濾器時參考。點選Filter按鈕或點選Display Filter按鈕開啟顯示過濾器視窗,如下圖所示:

image007
下圖顯示了預設過濾器列表,選中之後點選OK。

image008
小心使用預設過濾器。乙太網和IP主機過濾器可能與實際網路不符。使用之前必須編輯或作為建立參考。

小貼士:

顯示過濾器儲存在一個名為dfilters的檔案中,可以使用任何文字編輯器來進行編輯。要找到你的dfilters檔案,首先在Status條的右端查詢當前profile名。如果這一區域表明你在預設profile,選擇Help\About Wireshark\Folders並雙擊Personal Configuration資料夾連結,dfilters檔案就在這個目錄裡。