使用 wireshark 擷取 USB 訊號實需先載入 usbmon 模組,於 terminal 執行指令:
$ sudo modprobe usbmon
根據官方 wiki 說法,若系統沒有掛載 debugfs 需執行以下指令(小弟於 ubuntu 12.10 測試結果是不需要的)。
$ sudo mount -t debugfs / /sys/kernel/debug執行 wireshark 之前先確認 USB 裝置已接上電腦,可以透過 lsusb 確認想擷取的 usb ,lsusb 會顯示出 usb 裝置目前屬於哪個 USB Bus 與 Device 代號以及USB ID裝置,例如我們想觀察 Alcor Micro Corp. Flash Driver 這一個 USB 隨身碟裝置, lsusb 顯示該裝置目前位於 USB Bus 002 上代號為 Device 007 其 ID 為 058f:6387。
接著開啟 wireshark ,由於 usbmon 的加持每個 USB bus 皆顯示為一個獨立的 USB 裝置,假設想要擷取 Bus 2 的裝置即可選擇 Bus 2。
接著點選 Expression 設定 filter expression。
點選 Expression 按鈕會跳出 Filter Express 視窗,可以在 Field Name 欄位中尋找 USB 相關的項目並設定,例如想監測 USB ID 為 058f:6387 的裝置,先選擇 "usb.idVendor" 欄位接著選擇判斷條件 "==" 以及條件值 "0x058f",設定完之後按下確定。
回到 wireshark 主視窗中剛才設定的 filter 條件自動填入 filter 輸入欄位中,若條件格式語法正確其底色為綠色,反之語法錯誤則為紅色。
當然如果要設定較複雜的條件也沒問題,可將多個判斷是以 && 或是 || 進行組合。設定完 filter 條件後記得按下 Apply。
接著點選 Start 開始對 USB 裝置進行監測,即可體驗 wireshark 強大的 USB 封包擷取功能囉!
使用完之後可卸載 usbmon 模組。
$ sudo modprobe -r usbmon
參考資料 - http://wiki.wireshark.org/CaptureSetup/USB