天天看點

《精通Wireshark》—第2章2.2節抓包過濾器

本節書摘來自異步社群《精通wireshark》一書中的第2章2.2節抓包過濾器,作者【印度】charit mishra(夏裡特 米什拉),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

2.2 抓包過濾器

抓包過濾器可以讓管理者隻抓取自己想要抓取的資訊,同時丢棄其他的資訊。抓包這個程序是一個處理器密集型任務,同時wireshark也會占用大量的記憶體空間。是以,我們有時候需要保留一些資源以茲他用,這些資源可以用來進行資料包分析,有時候我們隻想要抓取那些滿足某些條件的資料包,同時丢棄其他的資料包。

wireshark可以讓使用者采用一些比較有意思的方法來對接口進行配置,讓軟體隻抓取那些滿足某些條件的資料包,這些條件需要在capture options視窗中進行配置,這個視窗的截圖如圖2-1所示。

《精通Wireshark》—第2章2.2節抓包過濾器

下面是對話框中的一些抓包可選項。

capture:在這個視窗中,使用者可以選擇自己想要抓包的接口,使用者甚至可以一次性選擇多個接口讓軟體進行監聽。窗格中的每一列(如是否在這個接口抓包[capture]、接口編号[interface]、接口名稱、該接口是否啟用了雜合模式等)都會顯示一個接口的詳細資訊。在capture對話框下面,使用者可以看到一個複選框,在這裡可以選擇雜合模式,甚至選擇可選項use promiscuous on all interfaces直接一次性激活所有接口的雜合模式。

manage interfaces:這個按鈕可以添加或者删除使用者希望監聽的接口。使用者甚至可以在這裡添加遠端的接口,不過這可能需要使用者擁有根權限。

capture filter:點選capture filter按鈕之後,使用者就會看到一個圖2-2所示的對話框。這個對話框中預設會顯示使用者已經配置好的抓包過濾器,而使用者也可以在這個對話框中建立和儲存自定義的抓包過濾器。

《精通Wireshark》—第2章2.2節抓包過濾器

首先,使用者可以直接采用這些預設的過濾配置檔案,以此來了解如何建立自定義的過濾參數。在讀者熟練掌握了這些基本使用方法之後,就可以繼續在同一個視窗中建立自己的自定義過濾器了,但一定要按照伯克利資料包過濾(bpf,berkley packet filtering)文法來定義過濾。bpf文法是一種行業标準,很多協定分析軟體都可以使用這種文法,是以不同協定分析軟體中使用的過濾器配置也可以互相遷移。

為了幫助讀者掌握這種方法,我們先來一起建立一個過濾器;假設我們需要抓取從一台位于192.168.1.1的web伺服器發來的資料包(如果讀者在監測的web伺服器使用的并不是這個位址,讀者可以進行相應地修改),就應該按照下面的步驟進行設定。

1.打開capture options(抓包可選項)對話框。

2.點選capture filter(抓包過濾器)。

3.點選new(建立)。

4. 在filter name(過濾器名)文本框中輸入web server 192.168.1.1(見圖2-3)。

《精通Wireshark》—第2章2.2節抓包過濾器

5.在filter string(過濾器字元串)文本框中輸入host 192.168.1.1 and port 80。

6.在完成上面的配置之後,點選ok;如果輸入的内容正确,那麼在capture filter按鈕之後出現的文本框背景就是綠色的,如圖2-4所示。

《精通Wireshark》—第2章2.2節抓包過濾器

capture files:這個選項可以讓管理者将抓取的資料包儲存到系統中已有的檔案中。如果使用者選擇一個檔案的話,抓取的資料包就會被添加到管理者選擇的這個檔案中。這時系統中會建立出一個臨時檔案,裝置會将資料寫入到這個臨時檔案中,這個檔案會儲存到使用者指定的位置。可根據自己的需要選擇檔案的儲存路徑,為此輸入檔案的絕對路徑,或者點選file文本框旁邊的browse(浏覽)來選擇路徑。

如果選擇了多個檔案可選項,那麼使用者可以将資料包儲存到多個檔案中,這個過程可以描述為下面這樣。

next file every:在抓取到一定量的資料之後,wireshark會建立出一個新的檔案,并且将這些資料添加進去。例如,我們可以在wireshark抓取到2mb資料之後就建立一個新的檔案。

next file every:在經過一段指定的時間之後,wireshark會建立出一個新的檔案,并且将這些資料添加進去。例如,我們可以在啟動抓包程序之後每5分鐘就建立一個新的檔案。

ring buffer:使用者可以用這個可選項限制新檔案的建立。wireshark會根據先來後到(first in first out)的次序将資料寫入多個檔案集當中。比如,我們選擇了ring buffer這個可選項,同時将檔案的數量增加到了5個,同時我們配置了每抓取到5mb的資料,軟體就會建立一個新的檔案。

現在,根據之前我們所作的配置,一旦軟體開始抓包,那麼每抓取到5mb的資料,軟體就會建立出一個新的檔案,并且将抓取的資料包寫入到檔案中。一旦檔案超出了我們在ring buffer部分設定的參數值,wireshark就不會再建立新的檔案了。軟體會回到第一個檔案,在這個檔案的基礎上寫入新的資料。圖2-5顯示的就是這種配置方法。

《精通Wireshark》—第2章2.2節抓包過濾器

stop capture settings:這個可選項可以讓軟體在滿足某項觸發條件後即停止抓包的程序;有4種不同的觸發因素。滿足這些條件可以讓wireshark停止抓取新的資料包,這些因素如下所示。

packet(s):在抓取的資料包達到某個數量之後,停止抓包。

file(s):在建立的檔案達到某個數量之後,停止抓包。

megabyte(s):在抓取資料的位元組數達到某個數量之後,停止抓包。

minute(s):在抓取資料包一段時間之後,停止抓包。

這裡讀者可能想問一個問題:如果我們同時選擇多個可選項會怎麼樣呢?比如,按照圖2-6進行勾選。

《精通Wireshark》—第2章2.2節抓包過濾器

使用者可以一次勾選多個可選項;這樣的話,wireshark會在觸發第一個條件時,就停止抓包。

display options:這裡有很多可選項可以進行配置,來限制packet list pane(資料包清單面闆)和protocol hierarchy(協定分層)視窗中顯示的資料包及相關資訊。讀者可以參考圖2-7來了解相關資訊。

《精通Wireshark》—第2章2.2節抓包過濾器

如果選擇了update list of packet in real-time(資料包實時更新清單),就會發現每當wireshark抓取到新的資料包時,packet list pane(資料包清單面闆)中的資訊就會更新,同時面闆會自動向上滾動。使用者要根據自己的需求來選擇可選項;否則執行這兩項任務所需要的資源就會用來執行其他程序了。

如果勾選了hide capture info dialog(隐藏抓包資訊對話框)複選框,那麼protocol hierarchy(協定分層)視窗中(以百分比的形式)顯示的統計資料就會隐藏起來。如果沒有任何特定的目的,建議使用者不要勾選這些可選項。

name resolution:如果勾選,這個特性可以将二層、三層和四層位址解析為對應的名稱。為了解釋清楚這個問題,請看圖2-8。

《精通Wireshark》—第2章2.2節抓包過濾器

2.2.1 為什麼要使用抓包過濾器

當網絡中資料流的規模相當龐大時,隻抓取滿足某些條件的流量就顯得十分重要了。如果使用者需要在生産環境中進行流量分析,那他遲早會需要自定義抓包過濾器。使用者要在開始抓包程序之前應用抓包過濾器。總之,wireshark抓取的每個資料包都交給抓包引擎,再由抓包引擎将抓取的資料包轉換成人類可以讀懂的格式。但是如果使用者應用了抓包過濾器,那麼wireshark就會丢棄與使用者需求不符的那些資料包。wireshark不會将這些丢棄的資料包交給抓包引擎進行轉換。相比之下,顯示過濾器就要具體和強大得多了;在使用抓包過濾器時,使用者一定要謹慎,因為如果有資料包因為與使用者定義的規則不符而被丢棄,這些資料包是無法恢複的。

建立過濾器時要使用伯克利資料包過濾器(bpf)文法,還有很多協定分析軟體使用的也是這種文法,因為這種文法是行業标準。這種文法很容易學習和使用,使用基本的格式來建構使用者的過濾标準就可以了。

2.2.2 如何使用抓包過濾器

我們之前使用bpf文法在capture filter對話框中建立了一個簡單的抓包過濾器;下面我們來具體讨論一下這個抓包過濾器,這對于掌握bpf至關重要,畢竟大量協定分析軟體都使用了bpf。

如果使用bpf文法,就必須按照一個格式結構來定義過濾器的标準,這個格式由兩個參數組成,它們是辨別符(identifier)和修飾符(qualifier),下面我們分别對這兩個概念進行說明。

辨別符:這是我們在資料包中尋找的參數。例如,如果想要過濾出某個ip位址的資料包,那麼抓包過濾器就要定義類似于host 192.168.1.1這樣的語句,其中192.168.1.1這個值就是辨別符。

修飾符:修飾符可以分為3部分。

類型(type):修飾符有3種類型:host、port和net。簡言之,類型修飾符辨別的是這個修飾符指代的名稱或編号。例如,過濾器host 192.168.1.1.1中,host就是類型修飾符。

方向(direction):有時,我們也需要抓取來自某個源位址或者去往某個目的位址的資料包,這時我們可以将方向作為一個修飾符。例如,在src host 192.168.1.1這個抓包過濾器中,src這個修飾符的作用就是讓軟體隻抓取來自某台特定主機的資料包。同理,如果設定dst host 192.168.1.1這樣一個抓包過濾器,那麼軟體就隻會抓取去往host 192.168.1.1的資料包了。

協定(proto):這是協定修飾符,它可以讓使用者指定要将哪個協定的流量添加到抓包過濾器的文法當中,來抓取該協定的資料包。例如,如果使用者希望抓取主機192.168.1.1發送的http流量,那麼抓包過濾器就應該寫作src host 192.168.1.1 and tcp port 80。

在前面的示例中,我們用串聯運算符(&/and)将兩個表達式組合了起來。同理,我們還可以使用變更運算符(|/or)和否定運算符(!/not)來組合和建立複雜的過濾器。

例如,我們在前文中建立了過濾器src host 192.168.1.1 and tcp port 80,其效果是抓取所有始發自192.168.1.1這個位址,并且目的端口為80的流量。

如果使用的運算符是or,即過濾器為src host 192.168.1.1 or tcp port 80,那麼隻要流量與上面兩個表達式中的任何一個相比對,軟體都會抓取流量。這也就是說,所有由192.168.1.1始發的流量,和所有發往80端口的流量,都會被軟體抓取到,無論另一個條件是否比對。

如果使用的運算符是not,那麼抓包過濾器not port 80表示的就是所有與80端口有關的流量都不要抓取。

一旦開始在生産環境中抓包,讀者就會發現and、or和not這樣的運算符是多麼常用。

2.2.3 抓包過濾器的示例

雖然wireshark提供了大量的過濾器,這些過濾器都可以幫助使用者熟悉bpf文法,不過要預設通路目前的過濾器,可以在主工具欄中選擇capture | capture filers或者點選capture options按鈕,然後點選capture filter。我們可以在同一個視窗中建立已經介紹過的新過濾器。

要建立抓包過濾器,可以參考下表中的内容。

《精通Wireshark》—第2章2.2節抓包過濾器
《精通Wireshark》—第2章2.2節抓包過濾器
《精通Wireshark》—第2章2.2節抓包過濾器

熟練掌握bpf文法相當重要。在深入學習和使用wireshark的過程中,讀者就會意識到這種技能的重要性。建議讀者不斷進行練習,直到自己已經對bpf文法爛熟于胸為止。

2.2.4 使用協定頭部參數的抓包過濾器

使用者可以用協定頭部字段中的參數來自定義抓包過濾器。建立這類過濾器的文法大概是這種形式:proto[offset:size(optional)]=value。在這裡,proto是使用者想要抓取流量的協定,offset是對應的數值在資料標頭部中的位置,size是要抓取的資料長度,value是想要尋找的資料。

比如說,我們隻想抓取icmp響應資料包;那麼,如果觀察圖2-9,就會發現icmp頭部類型處于最開始的位置,是以offset參數就應該從0開始。是以,在本例當中,offset值就應該設定為0,size部分應該設定為1位元組。我們擁有所有建立抓包過濾器所必需的資訊,是以,我們現在建立的表達式大緻就會是這樣:icmp[0:1]=0(見圖2-10)。

《精通Wireshark》—第2章2.2節抓包過濾器

我們首先來嘗試向www.google.com發起ping測試,看看是否可以實作通信(見圖2-11)。

《精通Wireshark》—第2章2.2節抓包過濾器

設定的結果是,wireshark就隻會抓取icmp響應資料包了。通過相同的方法,我們就可以按照協定頭部的參數來過濾出自己想要的流量了。

《精通Wireshark》—第2章2.2節抓包過濾器

下表列出了一些基于tcp或udp中某些位元組的抓包過濾器;讀者也不妨試着配置這些抓包過濾器。

《精通Wireshark》—第2章2.2節抓包過濾器

繼續閱讀