新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何用Wireshark捕獲USB數據?

        如何用Wireshark捕獲USB數據?

        作者: 時間:2016-12-13 來源:網絡 收藏
        現在越來越多的電子設備采用USB接口進行通訊,通訊標準也在逐步提高。那么,我們就會好奇這些設備是如何工作的?而無論你是一個硬件黑客,業余愛好者或者只是對它有一點興趣的,USB對我們都是具有挑戰性的。

        本文引用地址:http://www.104case.com/article/201612/329234.htm

        事實上通過wireshark,我們可以捕獲到usb設備發送給我們主機的數據,這樣就可以進一步研究了。

        本文中,我們將向大家介紹怎樣通過wireshark捕獲usb數據,使用的環境如下:

        l Wireshark 2.0.1(SVN)l Linux kernel 4.1.6

        你也可以用其他版本的wireshark,只要是1.2.0以上的都行。這里并沒有測試window上能不能行。

        簡介

        在開始前,我們先介紹一些USB的基礎知識。USB有不同的規格,以下是使用USB的三種方式:

        l USB UART l USB HID l USB Memory

        UART或者UniversalAsynchronousReceiver/Transmitter。這種方式下,設備只是簡單的將USB用于接受和發射數據,除此之外就再沒有其他通訊功能了。

        HID是人性化的接口。這一類通訊適用于交互式,有這種功能的設備有:鍵盤,鼠標,游戲手柄和數字顯示設備。

        最后是USBMemory,或者說是數據存儲。ExternalHDD,thumbdrive/flashdrive,等都是這一類的。

        其中使用的最廣的不是USBHID就是USBMemory了。

        每一個USB設備(尤其是HID或者Memory)都有一個供應商ID(VendorId)和產品識別碼(ProductId)。VendorId是用來標記哪個廠商生產了這個USB設備。ProductId用來標記不同的產品,他并不是一個特殊的數字,當然最好不同。如下圖:

        上圖是連接在我電腦上的USB設備列表,通過lsusb查看命令。

        例如說,我有一個無線鼠標Logitech。它是屬于HID設備。這個設備正常的運行,并且通過lsusb這個命令查看所有usb設備,現在大家能找出哪一條是這個鼠標嗎??沒有錯,就是第四個,就是下面這條:

        Bus003Device010:ID046d:c52fLogitech,Inc.UnifyingReceiver

        其中,ID046d:c52f就是Vendor-ProductId對,VendorId的值是046d,并且ProductId的值是c52f。Bus003Device010代表usb設備正常連接,這點需要記下來。

        準備

        我們用root權限運行Wireshark捕獲USB數據流。但是通常來說我們不建議這么做。我們需要給用戶足夠的權限來獲取linux中的usb數據流。我們可以用udev來達到我們的目的。我們需要創建一個用戶組usbmon,然后把我們的賬戶添加到這個組中。

        addgroup usbmon gpasswd -a $USER usbmonecho SUBSYSTEM=="usbmon", GROUP="usbmon", MODE="640" > /etc/udev/rules.d/99-usbmon.rules

        接下來,我們需要usbmon內核模塊。如果該模塊沒有被加載,我們可以通過以下命令家在該模塊:

        modprobe usbmon

        捕獲

        打開wireshark,你會看到usbmonX其中X代表數字。下圖是我們本次的結果(我使用的是root):

        如果接口處于活躍狀態或者有數據流經過的時候,wireshark的界面就會把它以波形圖的方式顯示出來。那么,我們該選那個呢?沒有錯,就是我剛剛讓大家記下來的,這個X的數字就是對應這USBBus。在本文中是usbmon3。打開他就可以觀察數據包了。



        關鍵詞: Wireshark捕獲USB數

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平罗县| 察哈| 磴口县| 紫阳县| 大港区| 静宁县| 平潭县| 宝兴县| 东宁县| 抚宁县| 三明市| 济南市| 沽源县| 繁峙县| 哈巴河县| 桦甸市| 科技| 江安县| 钟山县| 宿州市| 北票市| 宣城市| 密山市| 高邑县| 会泽县| 宜兴市| 泽库县| 色达县| 闻喜县| 四会市| 体育| 镇平县| 神木县| 峨边| 新巴尔虎左旗| 庐江县| 嵊州市| 株洲县| 津市市| 西吉县| 富平县|