就算出國旅行,鐵人賽也絕對不能斷更!筆者目前正在日本大阪,趁著跑完行程的深夜來完成今天的實作。
昨天我們學會了「顯示過濾器 (Display Filter)」,它能幫我們在茫茫封包海中找出關鍵線索。但實務上,如果我們在一台流量極大的正式伺服器上開啟 Wireshark,全盤接收所有封包會瞬間塞爆電腦的記憶體與硬碟。
因此,今天我們要學習另一把強大的武器——擷取過濾器 (Capture Filter)。它的作用是在封包進入 Wireshark 之前,直接在底層網卡進行「第一道攔截」,只放行我們感興趣的流量!
這兩者常常讓新手搞混,我們可以這樣理解:
⚠️ 注意: 擷取過濾器使用的是底層的 BPF (Berkeley Packet Filter) 語法,這與我們昨天學的 Wireshark 顯示語法完全不同!
我們今天的目標是:「只抓取 ICMP (Ping) 與 HTTP (Port 80) 的封包,其他一律丟棄。」
【實作練習】
Capture ...using this filter: 欄位中,輸入 BPF 語法:
icmp or port 80

為了驗證過濾器有沒有生效,我們要刻意製造三種不同的流量。
【實作練習】
打開 Ubuntu 終端機,依序輸入以下三個指令:
ping -c 3 8.8.8.8 (預期放行:ICMP)curl http://example.com (預期放行:Port 80)curl https://google.com (預期阻擋:因為 HTTPS 使用 Port 443)
【驗證結果】
回到 Wireshark 點擊紅色正方形停止擷取。我們來觀察封包列表:

畫面解析:
仔細看上方的「顯示過濾器」欄位是空的,我們並沒有套用任何視覺隱藏。但下方的封包列表卻異常乾淨!只有 ICMP 封包,以及 example.com 產生的 TCP (Port 80) 封包。
剛剛我們用 curl 請求 https://google.com 所產生的 Port 443 加密流量,完全沒有出現在列表中,因為它們在進入 Wireshark 之前,就已經被擷取過濾器給精準地丟棄了!
今天我們學會了如何在源頭進行流量管控。在真實世界的資安維運中,如果你只想側錄伺服器上特定資料庫(例如 MySQL 的 Port 3306)的連線異常,使用擷取過濾器將能幫你省下海量的硬碟空間與分析時間。
我們現在已經能精準抓到想要的封包了。但封包裡面的「資料」到底長什麼樣子?明天 [Day 14],我們將教大家使用 Wireshark 的殺手級功能——「Follow TCP Stream (追蹤 TCP 串流)」,帶你直接看穿未加密通訊中的對話與帳密內容!我們明天見。