¿Cómo volcar el tráfico USB?

9

Tengo un gamepad USB y me gustaría ver e inspeccionar las señales y comandos que estos periféricos están enviando a mi PC / kernel: ¿cómo puedo hacer eso?

Estaba asumiendo que algo así como

cat /dev/bus/usb/006/003

Fue suficiente, pero aparentemente este comando regresa inmediatamente e imprime algunos caracteres codificados ilegibles.

¿Hay alguna forma de "depurar" un dispositivo USB como ese?

usuario2485710
fuente

Respuestas:

11

Puede capturar el tráfico USB con Wireshark.
De su wiki :

Para volcar el tráfico USB en Linux, necesita el usbmonmódulo, que existe desde Linux 2.6.11 . La información sobre ese módulo está disponible /usr/src/linux/Documentation/usb/usbmon.txten el árbol fuente de Linux. Dependiendo de la distribución que esté utilizando y la versión de esa distribución, ese módulo podría estar integrado en el núcleo o podría ser un módulo cargable; si se trata de un módulo que se puede cargar, según la distribución que esté utilizando y la versión de esa distribución, podría o no cargarse por usted. Si es un módulo cargable y no está cargado, deberá cargarlo con el comando

modprobe usbmon

que debe ejecutarse como root.

Las versiones de libpcap anteriores a 1.0 no incluyen soporte USB, por lo que necesitará al menos libpcap 1.0.0 .

Para las versiones del kernel anteriores a 2.6.21 , el único mecanismo de captura de tráfico USB disponible es un mecanismo basado en texto que limita la cantidad total de datos capturados para cada bloque USB sin procesar a aproximadamente 30 bytes. No hay forma de cambiar esto sin parchear el kernel. Si debugfs aún no está montado /sys/kernel/debug, asegúrese de que esté montado allí emitiendo el siguiente comando como root:

mount -t debugfs / /sys/kernel/debug

Para la versión del kernel 2.6.21 y posterior , existe un protocolo binario para rastrear paquetes USB que no tiene esa limitación de tamaño. Para esa versión del núcleo, necesitará libpcap 1.1.0 o posterior , porque el soporte USB libpcap 1.0.x usa, pero no maneja correctamente, el mecanismo mapeado en memoria para el tráfico USB, que libpcap usará si está disponible; no puede ser no está disponible, por lo que libpcap siempre lo usará.

En libpcap 1.0.x, los dispositivos para capturar en USB tienen el nombre usbn, donde n es el número del bus. En libpcap 1.1.0 y posteriores, tienen el nombre usbmonn.

También necesitará un Wireshark 1.2.xo posterior .

Costin Gușă
fuente
1

Actualizando porque este fue el primer resultado que encontré cuando busqué esto. El mejor método que he encontrado en Debian Stretch es el siguiente:

# usbhid-dump --entity = all

Eso volcará los datos entrantes de todos los dispositivos USB. Tomé mi teclado como un regalo, y puedo leer cada código de operación en la transmisión.

cntra
fuente