Як скинути USB-трафік?


9

У мене є геймпад USB, і я хотів би бачити та перевіряти сигнали та команди, які ця периферія фактично надсилає на мій ПК / ядро: як я можу це зробити?

Я припускав, що щось подібне

cat /dev/bus/usb/006/003

Було достатньо, але, мабуть, ця команда повертається негайно і друкує деякі нечитабельні закодовані символи.

Є спосіб "налагодити" такий USB-пристрій?

Відповіді:


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 байтами. Неможливо змінити це, не виправляючи ядро. Якщо налагодження ще не встановлено /sys/kernel/debug, переконайтеся, що він встановлений там, видавши наступну команду як root:

mount -t debugfs / /sys/kernel/debug

Для ядра версії 2.6.21 і пізнішої версії існує двійковий протокол відстеження USB-пакетів, у якого немає такого обмеження розміру. Для цієї версії ядра вам знадобиться libpcap 1.1.0 або новішої версії , оскільки підтримка USB libpcap 1.0.x використовує, але неправильно обробляє механізм, нанесений на пам'ять для трафіку 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 = все

Це скидає дані, що надходять з усіх USB-пристроїв. Підібрав мою клавіатуру, як частування, і я можу прочитати кожен опкод у потоці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.