Как сбросить USB-трафик?

Как сбросить USB-трафик?

У меня есть USB-геймпад, и я хотел бы увидеть и проверить сигналы и команды, которые это периферийное устройство фактически посылает моему ПК/ядру: как это сделать?

Я предполагал, что что-то вроде

cat /dev/bus/usb/006/003

Этого было достаточно, но, по-видимому, эта команда немедленно возвращается и выводит какие-то нечитаемые закодированные символы.

Есть ли способ «отладить» такое USB-устройство?

решение1

Вы можете перехватывать USB-трафик с помощью Wireshark.
Из еговики:

Для сброса USB-трафика в Linux вам понадобится модуль usbmon, который существует со времен Linux2.6.11. Информация об этом модуле доступна /usr/src/linux/Documentation/usb/usbmon.txtв исходном дереве Linux. В зависимости от используемого вами дистрибутива и версии этого дистрибутива этот модуль может быть встроен в ядро ​​или может быть загружаемым модулем; если это загружаемый модуль, в зависимости от используемого вами дистрибутива и версии этого дистрибутива он может быть загружен или нет для вас. Если это загружаемый модуль, но не загружен, вам придется загрузить его с помощью команды

modprobe usbmon

который должен быть запущен от имени пользователя root.

Версии libpcap до версии 1.0 не включают поддержку USB, поэтому вам понадобитсяпо меньшей мереlibpcap1.0.0.

Для версий ядрадо 2.6.21, единственный доступный механизм захвата трафика USB — это текстовый механизм, который ограничивает общий объем захваченных данных для каждого необработанного блока USB примерно 30 байтами. Изменить это без исправления ядра невозможно. Если debugfs еще не смонтирован на /sys/kernel/debug, убедитесь, что он смонтирован там, выполнив следующую команду от имени root:

mount -t debugfs / /sys/kernel/debug

Для версии ядра2.6.21 и более поздние версии, есть бинарный протокол для трассировки USB-пакетов, который не имеет такого ограничения по размеру. Для этой версии ядра вам понадобится libpcap1.1.0 или новее, поскольку поддержка USB в libpcap 1.0.x использует, но не обрабатывает правильно, механизм отображения памяти для трафика USB, который libpcap будет использовать, если он доступен - его нельзя сделать недоступным, поэтому libpcap всегда будет его использовать.

В libpcap 1.0.x устройства для захвата на USB имеют имя , гдеusbnн— номер шины. В libpcap 1.1.0 и более поздних версиях они имеют имя .usbmonn

Вам также понадобится Wireshark.1.2.x или новее.

решение2

Обновление, потому что это был первый результат, который я нашел, когда искал это. Лучший метод, который я нашел на Debian Stretch, следующий:

# usbhid-dump --entity=all

Это сбросит данные, поступающие со всех USB-устройств. Взял клавиатуру в руки, как подарок, и могу прочитать каждый опкод в потоке.

Связанный контент