在Wireshark運行過程中選擇搜索(Ctrl-F),第一個默認的搜索選項就是顯示過濾器。
顯示過濾器用於捕獲文件,用來告訴Wireshark只顯示那些符合過濾條件的數據包。
顯示過濾器比捕獲過濾器更加常用,是因為它可以讓你對數據包進行過濾,卻並不省略掉捕獲文件中的其他數據。也就是說如果你想回到原先的捕獲文件,你僅僅需要清空顯示過濾表達式。
你可能需要使用顯示過濾器,來清理過濾文件中不相關的廣播流量,比如清理掉Packet List面板中與當前的分析問題無關的ARP廣播,但是那些ARP廣播之后可能會有用,所以最好暫時把他們過濾掉,而不是刪除他們。
如果想要過濾掉不惑窗口中所有的ARP數據包,將你的鼠標放到Packet List面板上方的Filter文本框中,然后輸入“!ARP”,就可以從Packet List面板中去掉所有的ARP數據包了,如下圖。

過濾器表達式語法結構
你會經常用到捕獲或者顯示過濾器來對某一個協議進行過濾。舉例來說,如果你在解決一個TCP問題,那么你就只希望看到捕獲文件中的TCP流量。一個簡單的tcp過濾器就可以解決這個問題。
加入為了解決你的TCP問題,你使用了恨過ping功能,所以也就產生了很多ICMP流量,你可以通過“!icmp”這個過濾器表達式,將你捕獲文件中的ICMP流量屏蔽掉。
比較操作符可以讓你進行值的比較。舉例來說,當你檢查一個TCP/IP網絡中的問題時,你可能經常需要檢查和某一個IP地址相關的數據包。等於操作符可以讓你創建一個只顯示192.168.0.1這個IP地址相關數據包的過濾器。
ip.addr==192.168.0.1
現在假設你只需要查看哪些長度小於128字節的數據包,你可以使用“小於或等於”操作符,來完成這個要求,其過濾器表達式如下。
frame.len<=128
Wireshark過濾器表達式的比較操作符
| 操作符 | 說明 |
|---|---|
| == | 等於 |
| != | 不等於 |
| > | 大於 |
| < | 小於 |
| >= | 大於等於 |
| <= | 小於等於 |
邏輯運算符可以讓你將多個過濾器表達式合並到一個語句中,從而極大提高過濾器的效率。舉例來說,如果我們只想顯示兩個IP地址上的數據包,我們可以使用or操作符來創建一個表達式,只顯示這兩個IP地址的數據包,如下所示。
ip.addr==192.168.0.1 or ip.addr==192.168.0.2
Wireshark的邏輯操作符
| 操作符 | 說明 |
|---|---|
| and | 兩個條件需同時滿足 |
| or | 其中一個條件被滿足 |
| xor | 有且僅有一個條件被滿足 |
| not | 沒有條件被滿足 |
顯示過濾器表達式實例
常用顯示過濾器
| 過濾器 | 說明 |
|---|---|
| !tcp.port==3389 | 排除RDP流量 |
| tcp.flag.syn==1 | 具有SYN標志位的TCP數據包 |
| tcp.flag.rst==1 | 具有RST標志位的TCP數據包 |
| !arp | 排除ARP流量 |
| http | 所有HTTP流量 |
| tcp.port23 || tcp.port21 | 文本管理流量(Telnet或FTP) |
| smtp || pop || imap | 文本email流量(SMTP、POP或IMAP) |
