Comment vider le trafic USB?

9

J'ai une manette de jeu USB et je voudrais voir et inspecter les signaux et les commandes que ces périphériques envoient réellement à mon PC / noyau: comment faire?

Je supposais que quelque chose comme

cat /dev/bus/usb/006/003

C'était suffisant, mais apparemment, cette commande revient immédiatement et affiche des caractères codés illisibles.

Il existe un moyen de "déboguer" un périphérique USB comme ça?

user2485710
la source

Réponses:

11

Vous pouvez capturer le trafic USB avec Wireshark.
De son wiki :

Pour vider le trafic USB sous Linux, vous avez besoin du usbmonmodule, qui existe depuis Linux 2.6.11 . Les informations sur ce module sont disponibles /usr/src/linux/Documentation/usb/usbmon.txtdans l'arborescence des sources Linux. Selon la distribution que vous utilisez et la version de cette distribution, ce module peut être intégré au noyau ou peut être un module chargeable; s'il s'agit d'un module chargeable, selon la distribution que vous utilisez et la version de cette distribution, il peut ou non être chargé pour vous. S'il s'agit d'un module chargeable et non chargé, vous devrez le charger avec la commande

modprobe usbmon

qui doit être exécuté en tant que root.

Les versions de libpcap antérieures à 1.0 n'incluent pas le support USB, vous aurez donc besoin d' au moins libpcap 1.0.0 .

Pour les versions du noyau antérieures à 2.6.21 , le seul mécanisme de capture de trafic USB disponible est un mécanisme basé sur du texte qui limite la quantité totale de données capturées pour chaque bloc USB brut à environ 30 octets. Il n'y a aucun moyen de changer cela sans patcher le noyau. Si debugfs n'est pas déjà monté sur /sys/kernel/debug, assurez-vous qu'il y est monté en émettant la commande suivante en tant que root:

mount -t debugfs / /sys/kernel/debug

Pour la version 2.6.21 du noyau et les versions ultérieures , il existe un protocole binaire pour le traçage des paquets USB qui n'a pas cette limitation de taille. Pour cette version du noyau, vous aurez besoin de libpcap 1.1.0 ou plus récent , car le support USB de libpcap 1.0.x utilise, mais ne gère pas correctement, le mécanisme mappé en mémoire pour le trafic USB, que libpcap utilisera s'il est disponible - il ne peut pas être rendu indisponible, donc libpcap l'utilisera toujours.

Dans libpcap 1.0.x, les périphériques de capture sur USB ont le nom usbn, où n est le numéro du bus. Dans libpcap 1.1.0 et versions ultérieures, ils portent le nom usbmonn.

Vous aurez également besoin d'un Wireshark 1.2.x ou plus récent .

Costin Gușă
la source
1

Mise à jour car c'était le premier résultat que j'ai trouvé lorsque j'ai recherché ceci. La meilleure méthode que j'ai trouvée sur Debian Stretch est la suivante:

# usbhid-dump --entity = all

Cela videra les données entrantes de tous les périphériques USB. J'ai pris mon clavier comme un régal et je peux lire tous les opcode du flux.

cntra
la source