Come scaricare il traffico USB?


9

Ho un gamepad USB e vorrei vedere e ispezionare i segnali e i comandi che questa periferica sta effettivamente inviando al mio PC / kernel: come posso farlo?

Pensavo che qualcosa del genere

cat /dev/bus/usb/006/003

Era abbastanza, ma apparentemente questo comando ritorna immediatamente e stampa alcuni caratteri codificati illeggibili.

C'è un modo per "eseguire il debug" di un dispositivo USB del genere?

Risposte:


11

È possibile acquisire il traffico USB con Wireshark.
Dalla sua wiki :

Per scaricare il traffico USB su Linux, è necessario il usbmonmodulo, che esiste da Linux 2.6.11 . Le informazioni su quel modulo sono disponibili /usr/src/linux/Documentation/usb/usbmon.txtnella struttura dei sorgenti di Linux. A seconda della distribuzione che si sta utilizzando e della versione di tale distribuzione, quel modulo potrebbe essere integrato nel kernel o potrebbe essere un modulo caricabile; se si tratta di un modulo caricabile, a seconda della distribuzione in uso e della versione di tale distribuzione, potrebbe essere o meno caricato per te. Se è un modulo caricabile e non caricato, dovrai caricarlo con il comando

modprobe usbmon

che deve essere eseguito come root.

Le versioni di libpcap precedenti alla 1.0 non includono il supporto USB, quindi sarà necessario almeno libpcap 1.0.0 .

Per le versioni del kernel precedenti alla 2.6.21 , l'unico meccanismo di acquisizione del traffico USB disponibile è un meccanismo basato su testo che limita la quantità totale di dati acquisiti per ciascun blocco USB grezzo a circa 30 byte. Non c'è modo di cambiarlo senza patchare il kernel. Se il debugfs non è già montato /sys/kernel/debug, assicurarsi che sia montato lì eseguendo il seguente comando come root:

mount -t debugfs / /sys/kernel/debug

Per la versione 2.6.21 del kernel e successive , esiste un protocollo binario per tracciare i pacchetti USB che non hanno questa limitazione di dimensione. Per quella versione del kernel, avrai bisogno di libpcap 1.1.0 o versioni successive , perché il supporto USB libpcap 1.0.x utilizza, ma non gestisce correttamente, il meccanismo mappato in memoria per il traffico USB, che libpcap utilizzerà se disponibile - non può essere reso non disponibile, quindi libpcap lo userà sempre.

In libpcap 1.0.x, i dispositivi per l'acquisizione su USB hanno il nome usbn, dove n è il numero del bus. In libpcap 1.1.0 e versioni successive, hanno il nome usbmonn.

Avrai anche bisogno di un Wireshark 1.2.xo successivo .


1

Aggiornamento perché questo è stato il primo risultato che ho trovato quando ho cercato questo. Il metodo migliore che ho trovato su Debian Stretch è il seguente:

# usbhid-dump --entity = all

Ciò scaricherà i dati in arrivo da tutti i dispositivi USB. Ho preso la mia tastiera come un piacere, e posso leggere ogni codice operativo nello stream.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.