Como despejar o tráfego USB?

Como despejar o tráfego USB?

Eu tenho um gamepad USB e gostaria de ver e inspecionar os sinais e comandos que este periférico está realmente enviando para o meu PC/kernel: como posso fazer isso?

Eu estava assumindo que algo como

cat /dev/bus/usb/006/003

Foi o suficiente, mas aparentemente este comando retorna imediatamente e imprime alguns caracteres codificados ilegíveis.

Existe uma maneira de "depurar" um dispositivo USB como esse?

Responder1

Você pode capturar o tráfego USB com o Wireshark.
Do seuwiki:

Para despejar o tráfego USB no Linux, você precisa do usbmonmódulo, que existe desde o Linux2.6.11. As informações sobre esse módulo estão disponíveis /usr/src/linux/Documentation/usb/usbmon.txtna árvore de origem do Linux. Dependendo da distribuição que você está usando e da versão dessa distribuição, esse módulo pode ser incorporado ao kernel ou pode ser um módulo carregável; se for um módulo carregável, dependendo da distribuição que você está usando e da versão dessa distribuição, ele pode ou não ser carregado para você. Se for um módulo carregável e não carregado, você terá que carregá-lo com o comando

modprobe usbmon

que deve ser executado como root.

Versões do libpcap anteriores a 1.0 não incluem suporte USB, então você precisarápelo menoslibpcap1.0.0.

Para versões do kernelantes de 2.6.21, o único mecanismo de captura de tráfego USB disponível é um mecanismo baseado em texto que limita a quantidade total de dados capturados para cada bloco USB bruto a cerca de 30 bytes. Não há como mudar isso sem corrigir o kernel. Se o debugfs ainda não estiver montado /sys/kernel/debug, certifique-se de que ele esteja montado emitindo o seguinte comando como root:

mount -t debugfs / /sys/kernel/debug

Para versão do kernel2.6.21 e posterior, existe um protocolo binário para rastrear pacotes USB que não possui essa limitação de tamanho. Para essa versão do kernel, você precisará do libpcap1.1.0 ou mais recente, porque o suporte USB da libpcap 1.0.x usa, mas não manipula corretamente, o mecanismo mapeado na memória para tráfego USB, que a libpcap usará se disponível - ele não pode ficar indisponível, então a libpcap sempre o usará.

Na libpcap 1.0.x, os dispositivos para captura em USB possuem o nome , ondeusbnné o número do ônibus. No libpcap 1.1.0 e posterior, eles têm o nome .usbmonn

Você também precisará de um Wireshark1.2.x ou mais recente.

Responder2

Atualizando porque este foi o primeiro resultado que encontrei quando pesquisei isso. O melhor método que encontrei no Debian Stretch é o seguinte:

# usbhid-dump --entity=todos

Isso irá despejar os dados recebidos de todos os dispositivos USB. Peguei meu teclado como um presente e posso ler todos os opcodes do stream.

informação relacionada