Como despejar o tráfego USB?

9

Eu adquiri um gamepad USB e gostaria de ver e inspecionar os sinais e comandos que esses periféricos estão 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 esse comando retorna imediatamente e imprime alguns caracteres codificados ilegíveis.

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

user2485710
fonte

Respostas:

11

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

Para despejar o tráfego USB no Linux, você precisa do usbmonmódulo que existe desde o Linux 2.6.11 . As informações sobre esse módulo estão disponíveis na /usr/src/linux/Documentation/usb/usbmon.txtárvore de fontes do Linux. Dependendo da distribuição que você está usando e da versão dessa distribuição, esse módulo pode estar embutido no 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ê precisará carregá-lo com o comando

modprobe usbmon

que deve ser executado como root.

As versões libpcap anteriores à 1.0 não incluem suporte a USB, portanto você precisará pelo menos da libpcap 1.0.0 .

Para versões do kernel anteriores à 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, assegure-se de que esteja montado lá emitindo o seguinte comando como root:

mount -t debugfs / /sys/kernel/debug

Para a versão 2.6.21 e posterior do kernel , 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á da libpcap 1.1.0 ou mais recente , porque o suporte à libpcap 1.0.x USB usa, mas não lida corretamente, o mecanismo mapeado pela memória para o tráfego USB, que a libpcap utilizará se disponível - não pode ser disponível, portanto, o libpcap sempre o usará.

No libpcap 1.0.x, os dispositivos para captura no USB têm o nome usbn, onde n é o número do barramento. No libpcap 1.1.0 e posterior, eles têm o nome usbmonn.

Você também precisará de um Wireshark 1.2.x ou mais recente .

Costin Gușă
fonte
1

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

# usbhid-dump --entity = all

Isso irá despejar os dados recebidos de todos os dispositivos USB. Peguei meu teclado como um presente e posso ler todos os códigos de operação no fluxo.

cntra
fonte