捕捉過濾器:用於決定將什麼樣的信息記錄在捕捉結果中。需要在開始捕捉前設置。 顯示過濾器:在捕捉結果中進行詳細查找。他們可以在得到捕捉結果後隨意修改。 |
兩種過濾器的目的是不同的。
捕捉過濾器是數據經過的第一層過濾器,它用於控制捕捉數據的數量,以避免產生過大的日誌文件。
顯示過濾器是一種更爲強大(複雜)的過濾器。它允許您在日誌文件中迅速準確地找到所需要的記錄。
兩種過濾器使用的語法是完全不同的。我們將在接下來的幾頁中對它們進行介紹:
1.
捕捉過濾器
捕捉過濾器的語法與其它使用Lipcap(Linux)或者Winpcap(Windows)庫開發的軟件一樣,比如著名的TCPdump。捕捉過濾器必須在開始捕捉前設置完畢,這一點跟顯示過濾器是不同的。
設置捕捉過濾器的步驟是:
- 選擇 capture -> options。
- 填寫"capture filter"欄或者點擊"capture filter"按鈕爲您的過濾器起一個名字並保存,以便在今後的捕捉中繼續使用這個過濾器。
- 點擊開始(Start)進行捕捉。
語法: |
|
|
|
|
|
|
||||||
例子: |
|
|
|
|
|
|
可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果沒有特別指明是什麼協議,則默認使用所有支持的協議。
Direction(方向):
可能的值: src, dst, src and dst, src or dst
如果沒有特別指明來源或目的地,則默認使用 "src or dst" 作爲關鍵字。
例如,"host 10.2.2.2"與"src or dst host 10.2.2.2"是一樣的。
Host(s):
可能的值: net, port, host, portrange.
如果沒有指定此值,則默認使用"host"關鍵字。
例如,"src 10.1.1.1"與"src host 10.1.1.1"相同。
Logical Operations(邏輯運算):
可能的值:not, and, or.
否("not")具有最高的優先級。或("or")和與("and")具有相同的優先級,運算時從左至右進行。
例如,
"not tcp port 3128 and tcp port 23"與"(not tcp port 3128) and tcp port 23"相同。
"not tcp port 3128 and tcp port 23"與"not (tcp port 3128 and tcp port 23)"不同。
例子:
tcp dst port 3128 |
ip src host 10.1.1.1 |
host 10.1.2.3 |
src portrange 2000-2500 |
not imcp |
src host 10.7.2.12 and not dst net 10.200.0.0/16 |
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 |
注意事項:
當使用關鍵字作爲值時,需使用反斜槓“\”。
"ether proto \ip" (與關鍵字"ip"相同).
這樣寫將會以IP協議作爲目標。
"ip proto \icmp" (與關鍵字"icmp"相同).
這樣寫將會以ping工具常用的icmp作爲目標。
可以在"ip"或"ether"後面使用"multicast"及"broadcast"關鍵字。
當您想排除廣播請求時,"no broadcast"就會非常有用。
查看 TCPdump的主頁以獲得更詳細的捕捉過濾器語法說明。
在Wiki Wireshark website上可以找到更多捕捉過濾器的例子。
2. 顯示過濾器:
通常經過捕捉過濾器過濾後的數據還是很複雜。此時您可以使用顯示過濾器進行更加細緻的查找。
它的功能比捕捉過濾器更爲強大,而且在您想修改過濾器條件時,並不需要重新捕捉一次。
語法: | Protocol | . |
|
. |
|
operator |
|
Operations |
expression |
|||||
|
|
|
|
|
|
|
|
您可以使用大量位於OSI模型第2至7層的協議。點擊"Expression..."按鈕後,您可以看到它們。
比如:IP,TCP,DNS,SSH
您同樣可以在如下所示位置找到所支持的協議:
Wireshark的網站提供了對各種 協議以及它們子類的說明。
String1, String2 (可選項):
協議的子類。
點擊相關父類旁的"+"號,然後選擇其子類。
Comparison operators (比較運算符):
可以使用6種比較運算符:
英文寫法: | C語言寫法: | 含義: |
|
|
等於 |
|
|
不等於 |
|
|
大於 |
|
|
小於 |
|
|
大於等於 |
|
|
小於等於 |
英文寫法: | C語言寫法: | 含義: |
|
|
邏輯與 |
|
|
邏輯或 |
|
|
邏輯異或 |
|
|
邏輯非 |
讓我們舉個例子:
"tcp.dstport 80 xor tcp.dstport 1025"
只有當目的TCP端口爲80或者來源於端口1025(但又不能同時滿足這兩點)時,這樣的封包纔會被顯示。
例子:
snmp || dns || icmp | 顯示SNMP或DNS或ICMP封包。 |
ip.addr == 10.1.1.1 |
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6 |
換句話說,顯示的封包將會爲:
來源IP:除了10.1.2.3以外任意;目的IP:任意
以及
來源IP:任意;目的IP:除了10.4.5.6以外任意
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6 |
換句話說,顯示的封包將會爲:
來源IP:除了10.1.2.3以外任意;同時須滿足,目的IP:除了10.4.5.6以外任意
tcp.port == 25 | 顯示來源或目的TCP端口號爲25的封包。 |
tcp.dstport == 25 | 顯示目的TCP端口號爲25的封包。 |
tcp.flags | 顯示包含TCP標誌的封包。 |
tcp.flags.syn == 0x02 | 顯示包含TCP SYN標誌的封包。 |
表達式正確 | |
表達式錯誤 |