Wie kann ich den USB-Verkehr dumpen?

Wie kann ich den USB-Verkehr dumpen?

Ich habe ein USB-Gamepad und möchte die Signale und Befehle sehen und überprüfen, die dieses Peripheriegerät tatsächlich an meinen PC/Kernel sendet: Wie kann ich das machen?

Ich ging davon aus, dass so etwas wie

cat /dev/bus/usb/006/003

Hat gereicht, aber anscheinend kehrt dieser Befehl sofort zurück und druckt einige unlesbare codierte Zeichen.

Gibt es eine Möglichkeit, ein solches USB-Gerät zu „debuggen“?

Antwort1


Sie können USB-Verkehr mit Wireshark erfassen.Wiki:

Um USB-Verkehr unter Linux zu dumpen, benötigen Sie das usbmonModul, das seit Linux existiert2.6.11. Informationen zu diesem Modul sind /usr/src/linux/Documentation/usb/usbmon.txtim Linux-Quellcodebaum verfügbar. Abhängig von der von Ihnen verwendeten Distribution und der Version dieser Distribution ist dieses Modul möglicherweise in den Kernel integriert oder ein ladbares Modul. Wenn es ein ladbares Modul ist, wird es möglicherweise für Sie geladen, abhängig von der von Ihnen verwendeten Distribution und der Version dieser Distribution. Wenn es ein ladbares Modul ist und nicht geladen wurde, müssen Sie es mit dem Befehl laden

modprobe usbmon

welches als Root ausgeführt werden muss.

libpcap-Versionen vor 1.0 enthalten keine USB-Unterstützung, daher benötigen Siemindestenslibpcap1.0.0.

Für Versionen des Kernelsvor 2.6.21, der einzige verfügbare Mechanismus zur Erfassung des USB-Datenverkehrs ist ein textbasierter Mechanismus, der die Gesamtmenge der erfassten Daten für jeden USB-Rohblock auf etwa 30 Byte begrenzt. Dies lässt sich nicht ändern, ohne den Kernel zu patchen. Wenn debugfs nicht bereits auf gemountet ist /sys/kernel/debug, stellen Sie sicher, dass es dort gemountet ist, indem Sie den folgenden Befehl als Root ausführen:

mount -t debugfs / /sys/kernel/debug

Für Kernelversion2.6.21 und höhergibt es ein binäres Protokoll zum Verfolgen von USB-Paketen, das diese Größenbeschränkung nicht hat. Für diese Kernel-Version benötigen Sie libpcap1.1.0 oder neuer, weil die USB-Unterstützung von libpcap 1.0.x den Memory-Mapping-Mechanismus für USB-Datenverkehr zwar verwendet, ihn aber nicht korrekt handhabt. Libpcap wird diesen Mechanismus verwenden, wenn er verfügbar ist. Da er nicht nicht verfügbar gemacht werden kann, wird libpcap ihn immer verwenden.

In libpcap 1.0.x haben die Geräte zum Aufzeichnen auf USB den Namen , wobeiusbnNist die Nummer des Busses. In libpcap 1.1.0 und höher haben sie den Namen .usbmonn

Sie benötigen außerdem einen Wireshark1.2.x oder neuer.

Antwort2

Aktualisierung, weil dies das erste Ergebnis war, das ich gefunden habe, als ich danach gesucht habe. Die beste Methode, die ich für Debian Stretch gefunden habe, ist die folgende:

# usbhid-dump --entity=alle

Dadurch werden die eingehenden Daten von allen USB-Geräten ausgegeben. Ich habe meine Tastatur sofort in die Hand genommen und kann jeden Operationscode im Stream lesen.

verwandte Informationen