🎯 重點摘要: 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 安裝

  1. 前往 Wireshark 官網 下載 Windows 安裝程式
  2. 執行下載的 .exe 檔案
  3. 在安裝精靈中,建議勾選 安裝 WinPcap/Npcap 資料包擷取庫 — 這是 Wireshark 擷取封包所必須的
  4. 完成安裝後,啟動 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 後,你應該會看到一個介面列表。只要能看到 eth0wlan0 等網路介面,就代表安裝成功。

Wireshark 基本操作

Wireshark 的操作可以分為三個主要步驟:選擇介面 → 擷取封包 → 分析封包

選擇網路介面

Wireshark 啟動後會顯示所有可用的網路介面。選擇你想監聽的介面:

  • eth0 / en0 — 有線網路介面
  • wlan0 / en1 — Wi-Fi 無線介面
  • lo — 回送介面 (Loopback, 127.0.0.1),監聽本地程式間的通訊
  • any — 所有介面
💡 要監聽本地 HTTP 請求(如 localhost:3000),請選擇 loany

開始與停止擷取

選擇介面後點擊 開始(藍色閃電圖示),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 擷取與分析流程:

  1. 在顯示過濾列輸入 http,只顯示 HTTP 封包
  2. 點擊其中一個 Request 封包,查看右下角「封包詳情」面板
  3. 展開 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 會自動將該連線的所有封包重新組合起來,顯示完整的請求與回應。

Wireshark TCP Stream 追蹤

這對於查看完整的 HTTP 請求/回應內容、除錯 API 整合非常方便。

匯出封包 (Export Specified Packets)

如果只想保存部分封包(例如只保存 HTTP 封包),可以:

  1. 在顯示過濾列輸入 http 並按 Enter
  2. 選單 → 檔案 → 匯出指定封包 (Export Specified Packets)
  3. 選擇「Display captured packets」並存檔為 .pcapng

存檔後的 .pcapng 檔案可以分享給其他人用 Wireshark 開啟。

匯出 HTTP 物件 (Export HTTP Objects)

Wireshark 可以自動提取 HTTP 回應中的檔案:

  1. 過濾 http
  2. 選單 → 檔案 → 匯出物件 → HTTP
  3. 會顯示所有下載的檔案,點擊「存檔」即可保存
💡 這對於調試下載失敗的情況非常有用 — 你可以直接看到伺服器回傳了哪些檔案。

統計資訊 (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 檔案如何分享?

使用 檔案 → 匯出 → 指定封包,可以只匯出特定過濾結果,減少檔案體積。