Wireshark 封包分析怎麼用?抓包、篩選器與故障排除入門
Wireshark 是開源的網路協定分析器,可以擷取網路介面上的封包、開啟既有的 pcap 或 pcapng 檔案,並把封包拆成可閱讀的協定欄位。它常用於確認 DNS、TCP、HTTP、TLS 等網路行為,協助定位「連不上、很慢、一直重傳」這類問題;它不是自動替你修好網路的工具,也不是看到一個封包就能判定入侵的掃描器。
先說結論:學 Wireshark 最有效的方式,是用一個自己有權管理的網路做短時間擷取,再依序使用顯示篩選器、封包詳細資料、Follow Stream 與 Statistics。擷取檔可能包含帳號、網址、Cookie、內部 IP 或其他個人資料,請先確認授權並妥善保存。
Wireshark 能做什麼?
| 用途 | 適合拿來做什麼 | 不要誤解成 |
|---|---|---|
| 即時擷取 | 從指定網路介面記錄一小段封包,重現問題當下的流量。 | 不代表一定能看到網路上所有裝置的流量;擷取位置與介面很重要。 |
| 協定解析 | 把封包拆成 Ethernet、IP、TCP、DNS、HTTP、TLS 等協定欄位。 | 解析出欄位不等於內容一定是明文,也不等於該封包本身就是惡意。 |
| 篩選與搜尋 | 只查看符合條件的封包,縮小故障排除範圍。 | Capture filter 與 display filter 是兩套不同語法,不能混用。 |
| 統計與對話 | 查看協定比例、端點、連線對話、封包數量與流量趨勢。 | 統計是線索,不會自動替你完成根因分析。 |
開始前的權限與資料安全
- 只擷取你獲得授權的網路:例如自己的電腦、測試環境或經管理者同意的公司網段。不要為了「看看別人的流量」而在陌生網路擷取。
- 先做短時間測試:選定問題重現步驟,開始擷取、重現一次、立即停止,再檢查檔案大小與內容。
- 確認介面與權限:第一次抓不到封包,先檢查是否選到正在使用的 Ethernet、Wi-Fi、VPN 或虛擬介面,以及作業系統與 Npcap/libpcap 的安裝和權限。Wireshark 的原始網卡存取由擷取元件處理,並不是單純開啟畫面就一定有資料。
- 限制分享範圍:pcap/pcapng 不要直接放到公開雲端或貼在論壇。若必須交給他人分析,先移除帳號、Cookie、內部位址與其他敏感欄位,並確認是否仍能重現問題。
Wireshark 官方 FAQ 特別提醒,封包檔可能含有密碼或其他敏感資訊;因此「可以擷取」不代表「可以任意分享」。
從第一次抓包到找到線索
- 選擇介面:在 Welcome 畫面觀察哪個介面有封包計數變化。若要排查 VPN 或容器問題,也要考慮實際流量是否走在虛擬介面。
- 控制擷取範圍:先不急著長時間錄製;可以先用簡單的 capture filter 或設定檔案大小/時間限制,避免產生難以處理的大檔。
- 重現問題:開始擷取後只做一個清楚的測試,例如重新載入頁面、執行一次 DNS 查詢或建立一次 TCP 連線,記下開始與結束時間。
- 停止並保存:優先使用 pcapng 保存,另外記錄介面、時區、測試步驟與當時的錯誤訊息。這些背景資訊比「一個很大的檔案」更有助於分析。
- 篩選後再閱讀:先用 display filter 縮小結果,再選一個封包查看 Packet Details、Packet Bytes,必要時用 Analyze → Follow 追蹤同一條 TCP、UDP 或 TLS stream。
- 用統計驗證假設:最後用 Statistics → Protocol Hierarchy、Conversations、Endpoints 或 IO Graph 檢查流量是否支持你的推論。
Capture filter 和 display filter 差在哪?
這是 Wireshark 新手最容易混淆的地方:capture filter 在「擷取前」限制要寫進檔案的封包,語法接近 libpcap;display filter 在「擷取後」只控制畫面顯示哪些封包,語法是 Wireshark 的欄位篩選語言。先使用 display filter 讀既有檔案時,不會改變原始擷取內容。
| 種類 | 套用時機 | 例子 | 適合情境 |
|---|---|---|---|
| Capture filter | 開始擷取前 | host 192.0.2.10tcp port 443 |
只記錄特定主機或連接埠,降低擷取量。 |
| Display filter | 擷取進行中或開啟檔案後 | ip.addr == 192.0.2.10tcp.analysis.retransmission |
在完整檔案中找特定欄位、協定或異常線索。 |
輸入 display filter 時,Wireshark 會檢查語法;篩選列變紅通常代表表達式不完整或欄位名稱錯誤。先按 Enter 套用,再確認封包數量是否符合預期,不要只看篩選列變綠就下結論。
四個實用的排查方向
DNS:名稱解析是否失敗?
先輸入 dns,確認是否有查詢與回應;再用 dns.flags.response == 1 聚焦回應封包。查看查詢的名稱、回應碼、回應來源與時間,再和作業系統或應用程式顯示的錯誤互相核對。只有看到 DNS 回應,不代表應用程式後續的 TCP 或 TLS 一定成功。
TCP:連線建立或傳輸是否異常?
用 tcp.flags.syn == 1 && tcp.flags.ack == 0 觀察初始 SYN,使用 tcp.analysis.retransmission 找重傳,再選取封包使用 Follow TCP Stream。若只有 SYN 沒有回應,可能是路由、ACL、主機防火牆、服務未監聽或擷取位置不在正確路徑;Wireshark 能提供證據,但仍要回到網路設備與服務端確認。
HTTP:明文請求或錯誤回應
在確定是未加密的 HTTP 時,可以用 http.request 查看請求,或用 http.response.code >= 400 找錯誤回應。現代網站多半使用 HTTPS,因此看不到 HTTP 內容不一定是沒有請求,可能只是內容被 TLS 加密。
TLS:為什麼只看到握手?
用 tls.handshake 可以先確認 TLS 握手與版本、伺服器名稱等可見欄位。若要解密內容,必須取得適用於該連線的 TLS secrets,例如合法產生的 key log file;Wireshark 官方文件也提醒,RSA 私密金鑰非常敏感,不能放進文章、截圖或公開的問題回報。即使成功解密,也只應在獲授權的測試範圍內使用。
Statistics 與 Follow Stream 怎麼搭配?
- Protocol Hierarchy:先看這個擷取檔裡有哪些協定,判斷是否真的包含你要排查的流量。
- Conversations:查看兩個端點之間的封包數、位元組與持續時間,適合找出最主要的連線。
- Endpoints:從主機或服務的角度整理來源與目的地,適合核對 DNS、代理伺服器或後端節點。
- IO Graph:把封包或位元組按時間畫出來,對照錯誤發生的時間點與流量尖峰。
- Follow Stream:選定一個封包後追蹤同一個 TCP、UDP、TLS 或 WebSocket 對話,比逐包翻找更容易理解應用層流程。
常見問題
為什麼完全看不到封包?
先確認介面是否選對、封包計數是否有變化、VPN 或虛擬網卡是否才是實際路徑,以及作業系統與擷取驅動程式權限是否正常。若流量只在另一台主機或交換器埠上,單靠本機 Wireshark 也不會自動看見。
可以用 Wireshark 找出密碼嗎?
未加密的協定可能暴露帳號或內容;加密協定通常只能看到握手與流量特徵,除非你持有合法的解密材料。無論哪種情況,擷取檔都要當成敏感資料保存,不要把別人的登入資訊或 session secrets 分享出去。
pcapng 檔案太大怎麼辦?
縮短擷取時間、在擷取前使用精準的 capture filter、設定檔案大小或 ring buffer,並只匯出與問題相關的封包。不要為了方便而直接刪除原始證據;先保留受控的原檔,再製作去識別化副本。
Wireshark 可以直接判定被入侵嗎?
不能。它能提供封包層面的觀察與可重現證據,但是否為攻擊需要結合主機日誌、身份驗證記錄、網路設備設定與時間線。把「不熟悉的封包」直接等同「惡意流量」,很容易造成誤判。
重點整理
Wireshark 的基本流程是:選對介面、短時間擷取、記錄重現步驟、用正確的 filter 篩選,再以封包詳細資料、Follow Stream 與 Statistics 驗證假設。Capture filter 影響擷取量,display filter 只影響檢視;DNS、TCP、HTTP、TLS 也要分清楚加密與擷取位置的限制。最後,請只分析獲授權的流量,並把 pcapng、密碼、Cookie 與解密金鑰當成敏感資料處理。
可參考 Wireshark 官方使用者指南、官方 display filter 參考 與 官方 FAQ。若想補充傳輸層概念,也可延伸閱讀站內的 TCP 與 UDP 協定差異整理。本文是技術教育內容,不代表對未授權網路進行測試的許可。















