使用 Extcap 掃描封包

在 GitHub 上查看來源

本指南將說明如何設定 Wireshark 的 extcap,以便從 Thread 網路嗅探封包。

如要使用 Pyspinel 進行封包嗅探 (不使用 extcap),請參閱「使用 Pyspinel 進行封包嗅探」一文。

設定嗅探器環境

在開始之前,請先完成下列步驟:

驗證

本指南已在下列主機系統上,針對 Zolertia Firefly (Texas Instruments CC2538 SoC) 進行驗證:

  • Debian 4.19.37 - Wireshark 3.0.4
  • macOS Mojave 10.14.6 - Wireshark 3.0.5
  • 64 位元 Windows 10 17134 版 — Wireshark 3.0.6

建構並閃現嗅探器

建構和閃燈操作說明會因平台而異。

如需建構及刷新 CC2538 的操作說明,請參閱 GitHub 上的 CC2538 範例 README

如需一般建構操作說明,請參閱「如何建構 OpenThread」。

使用嗅探器

Wireshark 首次啟動時,會顯示 Wireshark 擷取畫面。應列出連接至 OpenThread 嗅探器的硬體介面。

從單一介面擷取

如果這是您第一次使用介面,請按一下介面左側的「選項」按鈕:

OT 嗅探器 Wireshark Extcap 擷取

  1. 將「Channel」設為所需值。
  2. 檢查 IEEE 802.15.4 TAP,確認 pcap 輸出內容包含頻道資訊,且可在 Wireshark GUI 中顯示。
  3. 勾選「Save parameters on capture start」,確保系統在開始擷取後儲存這些參數,避免下次使用介面時需要再次設定 (除非您需要變更管道)。
  4. 按一下「開始」

OT 嗅探器 Wireshark Extcap 選項

如果參數已儲存,請選取硬體介面,然後按一下左上方的 Wireshark 圖示,開始嗅探。

從多個介面擷取

選取擷取畫面中列出的所有硬體介面,然後按一下左上方的 Wireshark 圖示。

從多個介面擷取時,請使用這些欄位來識別個別嗅探器:

  • 介面 ID (frame.interface_id):Wireshark 用來識別擷取介面的介面 ID
  • 介面名稱 (frame.interface_name):Wireshark 用來識別擷取介面的介面名稱
  • 頻道 (wpan-tap.ch_num) - IEEE 802.15.4 擷取頻道 (範圍:11-26)

OT 嗅探器 Wireshark Extcap 封包

疑難排解

OpenThread 嗅探器未列為 Wireshark 介面

  1. 如果您安裝了多個 Python 解譯器,請確認 extcap 指令碼使用的是 Python 3 解譯器。Pyspinel 不支援 Python 2。
  2. 檢查硬體是否已在 USB 上列舉,並載入驅動程式。
  3. 確認已將正確的韌體 (NCP 或 RCP) 刷入硬體。
  4. 確認位於 extcap 路徑中的 Python 指令碼是否可執行。
    • OS X 和 Linux:
      1. 確認 extcap_ot.py 檔案具有執行權限:
        ls -l extcap_ot.py
        
      2. 如果缺少執行 (x) 權限,請修改權限:
        chmod +x extcap_ot.py
        
      3. 確認介面是否列出:
        extcap_ot.py --extcap-interfaces
        
    • Windows:
      1. 確認介面是否列出:
        extcap_ot.bat --extcap-interfaces
        
      2. 如果這會導致 Python 錯誤,請確認 Python 版本為 3.x:
        py -3 --version
        

Wireshark 只允許 Root 使用者擷取封包

在 Ubuntu 上安裝 Wireshark 時,系統會提示使用者選擇下列其中一個選項:

  1. 建立 wireshark 使用者群組,並允許該群組的所有成員擷取封包。
  2. 僅允許 root 使用者擷取封包。

我們強烈建議您不要使用 Wireshark 做為 root 使用者。如果您選擇了該選項,請變更設定:

sudo dpkg-reconfigure wireshark-common

如果 Wireshark 已設定為將擷取作業限制為 wireshark 群組成員,您可能需要將正確的使用者新增至群組:

sudo usermod -a -G wireshark user

並將正確的使用者新增至 dialout 群組:

sudo usermod -a -G dialout user

關閉並重新啟動 Wireshark,套用新的使用者群組設定。

在 Windows 上擷取多個 USB 介面時,Wireshark 格式錯誤

這是某些舊版 Wireshark 的已知問題。請確認您使用的是 Wireshark 3.0.6 以上版本。