Wie kann ich den USB-Verkehr sichern?

9

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

Ich nahm an, dass so etwas

cat /dev/bus/usb/006/003

War genug, 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"?

user2485710
quelle

Antworten:

11

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

Um den USB-Verkehr unter usbmonLinux zu sichern , benötigen Sie das Modul, das seit Linux 2.6.11 existiert . Informationen zu diesem Modul finden Sie /usr/src/linux/Documentation/usb/usbmon.txtim Linux-Quellbaum. Abhängig von der verwendeten Distribution und der Version dieser Distribution ist dieses Modul möglicherweise in den Kernel integriert oder ein ladbares Modul. Wenn es sich um ein ladbares Modul handelt, wird es abhängig von der verwendeten Distribution und der Version dieser Distribution möglicherweise für Sie geladen oder nicht. Wenn es sich um ein ladbares Modul handelt und nicht geladen ist, 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 Sie mindestens libpcap 1.0.0 .

Für Versionen des Kernels vor 2.6.21 ist der einzige verfügbare Mechanismus zur Erfassung des USB-Datenverkehrs ein textbasierter Mechanismus, der die Gesamtmenge der für jeden USB-Rohblock erfassten Daten auf etwa 30 Byte begrenzt. Es gibt keine Möglichkeit, dies zu ändern, ohne den Kernel zu patchen. Wenn debugfs noch nicht bereitgestellt ist /sys/kernel/debug, stellen Sie sicher, dass es dort bereitgestellt ist , indem Sie den folgenden Befehl als root ausgeben:

mount -t debugfs / /sys/kernel/debug

Für die Kernel-Version 2.6.21 und höher gibt es ein Binärprotokoll zum Verfolgen von USB-Paketen, für das diese Größenbeschränkung nicht gilt. Für diese Kernel-Version benötigen Sie libpcap 1.1.0 oder neuer , da die USB-Unterstützung von libpcap 1.0.x den speicherabgebildeten Mechanismus für USB-Verkehr verwendet, aber nicht korrekt verarbeitet, den libpcap verwendet, falls verfügbar - dies kann nicht sein nicht verfügbar gemacht, daher wird libpcap es immer verwenden.

In libpcap 1.0.x haben die Geräte zum Erfassen auf USB den Namen usbn, wobei n die Nummer des Busses ist. In libpcap 1.1.0 und höher haben sie den Namen usbmonn.

Sie benötigen außerdem einen Wireshark 1.2.x oder neuer .

Costin Gușă
quelle
1

Aktualisieren, da dies das erste Ergebnis war, das ich beim Nachschlagen gefunden habe. Die beste Methode, die ich bei Debian Stretch gefunden habe, ist folgende:

# usbhid-dump --entity = all

Dadurch werden die von allen USB-Geräten eingehenden Daten ausgegeben. Habe meine Tastatur wie ein Leckerbissen aufgehoben und kann jeden Opcode im Stream lesen.

cntra
quelle