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

9

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

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

cat /dev/bus/usb/006/003

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

Есть способ "отладить" USB-устройство, как это?

user2485710
источник

Ответы:

11

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

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

modprobe usbmon

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

Релизы libpcap до 1.0 не включают поддержку USB, поэтому вам потребуется как минимум libpcap 1.0.0 .

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

mount -t debugfs / /sys/kernel/debug

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

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

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

Костин Гуцэ
источник
2

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

# usbhid-dump --entity = all

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

cntra
источник