Jak zrzucić ruch USB?

9

Mam gamepad USB i chciałbym zobaczyć i sprawdzić sygnały i polecenia wysyłane przez te urządzenia peryferyjne do mojego komputera / jądra: jak mogę to zrobić?

Zakładałem, że coś takiego

cat /dev/bus/usb/006/003

Wystarczało, ale najwyraźniej polecenie to natychmiast wraca i wyświetla niektóre nieczytelne zakodowane znaki.

Czy istnieje sposób na „debugowanie” takiego urządzenia USB?

użytkownik2485710
źródło

Odpowiedzi:

11

Możesz przechwytywać ruch USB za pomocą Wireshark.
Z jego wiki :

Aby zrzucić ruch USB w systemie Linux, potrzebujesz usbmonmodułu, który istnieje od Linuksa 2.6.11 . Informacje o tym module są dostępne w /usr/src/linux/Documentation/usb/usbmon.txtdrzewie źródeł Linux. W zależności od używanej dystrybucji i wersji tej dystrybucji moduł ten może być wbudowany w jądro lub może być modułem ładowalnym; jeśli jest to moduł ładowalny, w zależności od używanej dystrybucji i wersji tej dystrybucji, może on zostać załadowany lub nie. Jeśli jest to moduł do załadowania i nie jest załadowany, będziesz musiał go załadować za pomocą polecenia

modprobe usbmon

który musi być uruchomiony jako root.

Wersje libpcap wcześniejsze niż 1.0 nie zawierają obsługi USB, więc będziesz potrzebował co najmniej libpcap 1.0.0 .

W wersjach jądra wcześniejszych niż 2.6.21 jedynym dostępnym mechanizmem przechwytywania ruchu USB jest mechanizm tekstowy, który ogranicza całkowitą ilość danych przechwyconych dla każdego surowego bloku USB do około 30 bajtów. Nie można tego zmienić bez łatania jądra. Jeśli debugfs nie jest jeszcze zamontowany /sys/kernel/debug, upewnij się, że jest tam zamontowany, wydając następującą komendę jako root:

mount -t debugfs / /sys/kernel/debug

W przypadku jądra w wersji 2.6.21 i nowszych istnieje protokół binarny do śledzenia pakietów USB, który nie ma takiego ograniczenia rozmiaru. Do tej wersji jądra będziesz potrzebować libpcap 1.1.0 lub nowszego , ponieważ obsługa USB libpcap 1.0.x używa, ale nie obsługuje poprawnie, odwzorowanego w pamięci mechanizmu ruchu USB, którego libpcap użyje, jeśli jest dostępny - nie może być stał się niedostępny, więc libpcap zawsze go użyje.

W libpcap 1.0.x urządzenia do przechwytywania na USB mają nazwę usbn, gdzie n jest numerem magistrali. W libpcap 1.1.0 i nowszych mają one nazwę usbmonn.

Potrzebny będzie również Wireshark 1.2.x lub nowszy .

Costin Gușă
źródło
2

Aktualizacja, ponieważ był to pierwszy wynik, który znalazłem, kiedy to sprawdziłem. Najlepsza metoda, jaką znalazłem na Debian Stretch, to:

# usbhid-dump --entity = all

Spowoduje to zrzucenie danych przychodzących ze wszystkich urządzeń USB. Podniosłem klawiaturę jak uczta i mogę odczytać każdy kod operacji w strumieniu.

cntra
źródło