如何轉儲 USB 流量?

如何轉儲 USB 流量?

我有一個 USB 遊戲手柄,我想查看和檢查該外圍設備實際發送到我的 PC/內核的信號和命令:我該如何做到這一點?

我假設類似的事情

cat /dev/bus/usb/006/003

已經足夠了,但顯然這個命令立即返回並列印一些不可讀的編碼字元。

有沒有辦法像這樣「調試」USB 設備?

答案1

您可以使用 Wireshark 擷取 USB 流量。
從其維基百科:

要在 Linux 上轉儲 USB 流量,您需要該usbmon模組,該模組自 Linux 以來就已存在2.6.11。有關該模組的資訊可在/usr/src/linux/Documentation/usb/usbmon.txtLinux 原始碼樹中找到。根據您使用的發行版以及該發行版的版本,該模組可能內建於核心中,也可能是可載入模組;如果它是可載入模組,則可能會或可能不會為您加載它,具體取決於您使用的發行版以及該發行版的版本。如果它是可加載模組,但未加載,則必須使用以下命令加載它

modprobe usbmon

必須以 root 身分運行。

1.0 之前的 libpcap 版本不包括 USB 支持,因此您需要至少libpcap1.0.0

對於核心版本21年6月21日之前,唯一可用的 USB 流量擷取機制是基於文字的機制,它將每個原始 USB 區塊擷取的資料總量限制為大約 30 位元組。如果不修補內核,就無法改變這一點。如果 debugfs 尚未安裝在 上/sys/kernel/debug,請透過以 root 身分發出以下命令來確保已安裝它:

mount -t debugfs / /sys/kernel/debug

對於核心版本2.6.21 及更高版本,有一個用於追蹤 USB 資料包的二進位協議,該協議沒有大小限制。對於該核心版本,您將需要 libpcap1.1.0 或更高版本,因為 libpcap 1.0.x USB 支援使用 USB 流量的記憶體映射機制,但沒有正確處理,如果可用,libpcap 將使用該機制 - 它不能變得不可用,因此 libpcap 將始終使用它。

在 libpcap 1.0.x 中,用於在 USB 上捕獲的裝置的名稱為,其中usbnn是公車的號碼。在 libpcap 1.1.0 及更高版本中,它們的名稱為。usbmonn

您還需要一個 Wireshark1.2.x 或更新版本

答案2

更新是因為這是我查找時發現的第一個結果。我在 Debian Stretch 上找到的最佳方法如下:

# usbhid-dump --entity=all

這將轉儲從所有 USB 裝置傳入的資料。像對待美食一樣拿起我的鍵盤,我可以讀取流中的每個操作碼。

相關內容