🎯 重點摘要: Wireshark 是網路封包分析的利器,讓你可以「看見」網路上流動的每個封包:
① 理解網路七層協定模型與 Wireshark 如何分析封包
② 安裝 Wireshark(Windows / macOS / Linux 三種方式)
③ 掌援基本操作(介面選擇、開始/停止擷取、顯示過濾)
④ 常見通訊協定分析(HTTP、HTTPS/TLS、DNS、TCP)
⑤ 進階技巧(追蹤 TCP 串流、匯出物件、統計分析、IO 圖表)
30 分鐘從零開始,讓網路封包浮雲變得清清楚滅,除錯速度飆升!
前言 — 什麼是 Wireshark?
Wireshark 是一個網路封包分析工具。你可以把它想像成「網路的透視鏡」 — 它能夠攔截、記錄與分析網路中傳輸的所有封包,讓你看到本來看不見的網路活動。
當你的網站上線卻打不開、API 回應很慢、或者懷疑伺服器被攻擊時,Wireshark 就是你的偵查利器 — 它告訴你到底發生了什麼。
為什麼需要 Wireshark?
以下幾種場景,你會特別需要 Wireshark:
- 除錯網路問題:連線失敗、連線超慢、DNS 解析異常
- 分析協定:確認請求/回應是否符合預期,檢查 HTTP 標頭、狀態碼
- 安全審計:發現是否有敏感資料外洩、是否有來路不明的連線
- 學習網路協定:了解 HTTP、TCP、DNS、TLS 等協定的實際運作
Wireshark 安裝教學
Windows 安裝
- 前往 Wireshark 官網 下載 Windows 安裝程式
- 執行下載的
.exe檔案 - 在安裝精靈中,建議勾選 安裝 WinPcap/Npcap 資料包擷取庫 — 這是 Wireshark 擷取封包所必須的
- 完成安裝後,啟動 Wireshark
⚠️ 如果沒有安裝 Npcap,Wireshark 無法擷取封包。安裝時若跳過,請到 Npcap 官網 單獨安裝。
macOS 安裝
macOS 有兩種安裝方式:
- Homebrew 安裝(推薦):
brew install wireshark - 圖形化安裝: 前往 官網 下載 macOS 版本的
.dmg檔案,拖拉到 Applications 資料夾即可。
🔑 macOS 可能需要授予 Wireshark 管理權限才能擷取封包。首次執行時會跳出請求,點擊「允許」即可。
Linux 安裝(Ubuntu / Debian 為例)
sudo apt update
sudo apt install wireshark
在安裝過程中,系統會問你「是否允�Fernando 擷取非 root 使用者的封包?」,建議選擇 Yes,否則每次都要用 sudo wireshark 執行。
如果已經安裝完忘記選擇,可以事後補救:
sudo dpkg-reconfigure wireshark-common
然后將你的使用者加入 wireshark 群組:
sudo usermod -aG wireshark $USER
加入後需要登出再登入才能生效。
驗證安裝
啟動 Wireshark 後,你應該會看到一個介面列表。只要能看到 eth0、wlan0 等網路介面,就代表安裝成功。
Wireshark 基本操作
Wireshark 的操作可以分為三個主要步驟:選擇介面 → 擷取封包 → 分析封包。
選擇網路介面
Wireshark 啟動後會顯示所有可用的網路介面。選擇你想監聽的介面:
eth0/en0— 有線網路介面wlan0/en1— Wi-Fi 無線介面lo— 回送介面 (Loopback, 127.0.0.1),監聽本地程式間的通訊any— 所有介面
💡 要監聽本地 HTTP 請求(如localhost:3000),請選擇lo或any。
開始與停止擷取
選擇介面後點擊 開始(藍色閃電圖示),Wireshark 就會開始擷取封包。要停止,點擊 停止 按鈕即可。
Wireshark 介面說明
Wireshark 主要有 四個面板:
| 面板 | 功能 |
|---|---|
| 封包列表 (Packet List) | 顯示所有擷取的封包,每列一行,包含序號、時間、來源、目的地、協定、長度等資訊 |
| 封包詳情 (Packet Details) | 點擊某個封包後顯示其完整的協定階層資訊 |
| 封包資料 (Packet Bytes) | 顯示封包的原始十六進位與 ASCII 資料 |
| 狀態列 (Status Bar) | 顯示已擷取封包數、顯示過濾器狀態、解析進度等 |
顯示過濾器 (Display Filter) 與擷取過濾器 (Capture Filter)
Wireshark 有兩種過濾器:顯示過濾器用於過濾已擷取的封包,擷取過濾器用於限制擷取的封包範圍。
顯示過濾器 (Display Filter)
顯示過濾器是 Wireshark 最重要的功能之一。輸入在 顯示過濾列(藍色欄位)中並按 Enter,即可快速篩選出感興趣的封包。
| 過濾器語法 | 說明 | 範例 |
|---|---|---|
http |
過濾所有 HTTP 封包 | http |
ip.addr == 192.168.1.1 |
過濾與指定 IP 相關的封包(來源或目的) | ip.addr == 192.168.1.1 |
tcp.port == 80 |
過濾埠號為 80 的 TCP 封包 | tcp.port == 443 |
dns.qry.name == "example.com" |
過濾 DNS 查詢特定域名的封包 | dns.qry.name == "google.com" |
http.request.method == "GET" |
過濾 HTTP GET 請求 | http.request.method == "POST" |
tls |
過濾所有 TLS/SSL 加密封包 | tls.handshake |
擷取過濾器 (Capture Filter)
擷取過濾器是在開始擷取前設定,用於限制擷取的封包範圍。使用 BPF(Berkeley Packet Filter) 語法。
host 192.168.1.1 # 僅擷取與此 IP 相關封包
port 80 # 僅擷取埠號 80 的封包
tcp and port 443 # 僅擷取 TCP 且埠號 443 的封包
not arp # 擷取除了 ARP 封包之外的所有封包
src net 10.0.0.0/8 # 擷取來源為 10.x.x.x 的封包
常見通訊協定分析
掌握這些常見協定的分析技巧,可以解決 80% 的網路問題。
HTTP 分析
HTTP 是最常見的應用層協定。以下是典型的 HTTP 擷取與分析流程:
- 在顯示過濾列輸入
http,只顯示 HTTP 封包 - 點擊其中一個 Request 封包,查看右下角「封包詳情」面板
- 展開
Hypertext Transfer Protocol區塊,可以看到方法、URL、標頭與狀態碼
| HTTP 狀態碼 | 意義 | 常見原因 |
|---|---|---|
| 200 | 請求成功 | 一切正常 |
| 301 / 302 | 重新導向 | URL 更改、SEO 重定向 |
| 404 | 找不到資源 | 路徑錯誤、文件不存在 |
| 500 | 伺服器錯誤 | 伺服器內部錯誤、應用程式異常 |
| 502 | 閘道錯誤 | 反向代理後端伺服器離線 |
| 504 | 閘道逾時 | 後端伺服器回應逾時 |
實戰範例:診斷慢請求
如果某個 API 回應很慢,可以這樣找問題:
# 1. 過濾 HTTPS 封包
tls
# 2. 按時間排序,找出請求和回應之間的間隔
# 在封包列表中,按「Time」欄標題排序
# 3. 追蹤該 TCP 串流
# 右鍵 → "Follow" → "TCP Stream"
HTTPS / TLS 分析
HTTPS 封包的內容已經加密,因此你看不到實際的請求/回應內容,但你可以分析:
- TLS 握手:檢查憑證是否正確、加密協商是否成功
- 連線時間:DNS 解析 + TCP 三向交握 + TLS 握手的各段耗時
- 數據庫大小:請求與回應的封包數量
# 過濾 TLS 握手封包
tls.handshake
# 過濾 TLS 版本為 1.3
tls.record.version == 0x0303
# 檢查是否有憑證警告
ssl.alert_message.desc
DNS 分析
DNS 問題是網路連線失敗的常見原因。可以使用以下過濾器診斷:
# 過濾 DNS 封包
dns
# 過濾特定域名的查詢
dns.qry.name == "example.com"
# 過濾 DNS 回應錯誤
dns.flags.rcode != 0
# 檢查 DNS 伺服器
dns.a
🕵️♂️ DNS 擷取重點:
• 如果 DNS 查詢失敗,不會有後續 HTTP 請求
• DNS 回應過慢會直接影響整體連線時間
• 可以看到 DNS 使用的伺服器 IP (通常是 8.8.8.8 或 1.1.1.1)
TCP 分析
TCP 是網路通訊的基礎。理解 TCP 三向交握 (Three-Way Handshake) 與擁塞控制對除錯很重要。
# 過濾 TCP 三向交握
tcp.flags.syn == 1 and tcp.flags.ack == 0
# 過濾 TCP 重置封包 (RST 表示連線被中斷)
tcp.flags.reset == 1
# 過濾 Retransmission ( Retransmission 表示封包丟失)
tcp.analysis.retransmission
# 過濾 Out-of-Order ( 無序封包)
tcp.analysis.out_of_order
DOS 常見的 TCP 場景:
連線超時→ 沒有收到 SYN-ACK → 防火牆擋掉了RST 過多→ 伺服器拒絕連線 → 埠未開或服務未啟動Retransmission→ 網路丟包 → 可能是網路質素問題
進階技巧
追蹤 TCP 串流 (Follow TCP Stream)
這是 Wireshark 的殺手級功能之一。右鍵點選某個 TCP 封包 → 選擇 Follow → TCP Stream,Wireshark 會自動將該連線的所有封包重新組合起來,顯示完整的請求與回應。
這對於查看完整的 HTTP 請求/回應內容、除錯 API 整合非常方便。
匯出封包 (Export Specified Packets)
如果只想保存部分封包(例如只保存 HTTP 封包),可以:
- 在顯示過濾列輸入
http並按 Enter - 選單 → 檔案 → 匯出指定封包 (Export Specified Packets)
- 選擇「Display captured packets」並存檔為
.pcapng
存檔後的 .pcapng 檔案可以分享給其他人用 Wireshark 開啟。
匯出 HTTP 物件 (Export HTTP Objects)
Wireshark 可以自動提取 HTTP 回應中的檔案:
- 過濾
http - 選單 → 檔案 → 匯出物件 → HTTP
- 會顯示所有下載的檔案,點擊「存檔」即可保存
💡 這對於調試下載失敗的情況非常有用 — 你可以直接看到伺服器回傳了哪些檔案。
統計資訊 (Statistics)
Wireshark 提供強大的統計分析功能:
| 功能 | 用途 |
|---|---|
| IO 圖表 (IO Graphs) | 以時間軸顯示封包流量,可以用過濾器篩選特定流量 |
| 終端站統計 (Endpoints) | 列出所有通訊端 IP 與資料傳送量 |
| 對話統計 (Conversations) | 列出所有 TCP/UDP 對話,顯示雙向資料量 |
| 通訊協定階層 (Protocol Hierarchy) | 顯示各協定所佔封包比例 |
IO 圖表進階用法
IO 圖表可以用來視覺化網路流量:
# 預設顯示封包數統計
# 在過濾欄中輸入:
tcp.len > 0 # 只顯示有資料的 TCP 封包
# 顯示 HTTP 回應時間
http.time
# 同時顯示多個曲線
# Graph 1: http.request (請求數)
# Graph 2: http.response (回應數)
# Graph 3: tcp.analysis.retransmission (重送封包)
常見問題 (FAQ)
Q1: Wireshark 擷取不到封包怎麼辦?
可能原因與解決方案:
- 沒有管理權限 → Windows/macOS 請以管理員/最高權限啟動,Linux 請確認使用者在
wireshark群組中 - Npcap/WinPcap 未安裝 → 重新安裝,並勾選「Install Npcap in WinPcap API-compatible Mode」
- 選錯介面 → 確認選擇的是實際網路介面(
lo是 loopback,wlan0是 Wi-Fi)
Q2: 擷取封包超級多,怎麼過濾?
擷取前設定擷取過濾器(Capture Filter),例如:
# 擷取前過濾,只擷取 HTTP 流量
port 80 or port 443
Q3: HTTPS 封包看不懂內容?
HTTPS 已經加密,Wireshark 無法解密。但你可以:
- 分析 TLS 握手、伺服器憑證、連線時間
- 搭配 金鑰記錄檔 (key log file) 進行解密(進階,請自行研究)
- 使用 mitmproxy 等代理工具進行中間人解密
Q4: 擷取的 .pcap 檔案如何分享?
使用 檔案 → 匯出 → 指定封包,可以只匯出特定過濾結果,減少檔案體積。