ubuntuusers.de

USB-Kommunikation protokollieren und untersuchen

Status: Ungelöst | Ubuntu-Version: Ubuntu Unity 24.04 (Noble Numbat)
Antworten |

UlfZibis

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3162

Wohnort: Köln

Hallo,

ich habe hier einen Dia-Scanner Braun MultiMag SlideScan 6000. Wenn ich den anschließe und dann einschalte, macht der erst mal eine ca. 3-Minütige Selbst-Kalibrierung. Während dieser Zeit wird er auch erkannt, siehe farbmanagment-colord-sane-schaltet-usb-port-ab

Nun vermute ich, dass der Prozess colord-sane einen Befehl an den Scanner schickt, den er nicht versteht, und der dann die Kommunikation ganz abbricht.

So würde mich interessieren, wie man diese USB-Kommunikation protokollieren kann, um auf ein evtl. ungünstiges Verhalten von colord-sane mittels Bug-Report hinweisen zu können. Also möglichst genau herausfinden, wo und wodurch die Kommunikation abgebrochen wird.

Moderiert von sebix:

Thema in einen passenden Forenbereich verschoben. Bitte beachte die als wichtig markierten Themen („Welche Themen gehören hier her und welche nicht?“) in jedem Forenbereich. Danke.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1241

... wie man diese USB-Kommunikation protokollieren kann, ...

Ja, das kann man auch mit "wireshark" machen (siehe hier).

Ich verwende zu diesem Zweck allerdings "usbhid-dump". Das ist im Paket "usbutils" vorhanden und normalerweise bereits installiert.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3162

Wohnort: Köln

shiro schrieb:

Ich verwende zu diesem Zweck allerdings "usbhid-dump". Das ist im Paket "usbutils" vorhanden und normalerweise bereits installiert.

Danke für den Hinweis.

Aber bei mir kommt da nix. was mache ich da falsch?

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 8087:8000 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 003: ID 8087:07dc Intel Corp. Bluetooth wireless interface
Bus 003 Device 004: ID 04ca:7035 Lite-On Technology Corp. Integrated Camera
Bus 003 Device 012: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse
Bus 003 Device 021: ID 05e3:0142 Genesys Logic, Inc. Multiple Slides Scanner-3600
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
ich@W541:~$ usbhid-dump -m 05e3:0142
No matching HID interfaces
ich@W541:~$ usbhid-dump -m 05e3:0142
No matching HID interfaces
ich@W541:~$ usbhid-dump -m 05e3:0142
No matching HID interfaces

Und mit -a 3:21 kommt die gleiche Meldung.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1241

Aber bei mir kommt da nix. was mache ich da falsch?

Hmm, was auch immer bei dir "nix" meint. Eventuell hast du ja kein "HID" Device am USB Port. Aus diesem Grund hatte ich ja auch auf "wireshark" verwiesen.

Gehe bitte mal Schritt für Schritt diese Anleitung durch. Dabei ist das Laden von "modprobe usbmon" sehr sinnvoll. Wenn du dann "wireshark" eventuell "sudo wireshark" startest, solltest du auch die "usbmon3" Quelle auswählen können. Da du bei "3:21" Kommunikation erwartest, solltest du unter "Source/Destination" Pakete von/zu 3.21.x feststellen können. Schau dir diese mal an. Hilfreich ist es, wenn dies nicht dein erster Kontakt mit "wireshark" ist.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3162

Wohnort: Köln

shiro schrieb:

Hmm, was auch immer bei dir "nix" meint. Eventuell hast du ja kein "HID" Device am USB Port.

Verstehe, ja gut möglich, dass der Scanner nicht als HID zählt. Danke für den Hinweis.

Gehe bitte mal Schritt für Schritt diese Anleitung durch.

Ja dann werde ich mich da mal ran machen.

Hilfreich ist es, wenn dies nicht dein erster Kontakt mit "wireshark" ist.

Leider schon.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1241

Leider schon.

Oha. Dann heißt es Lernkurve hochfahren.

Leider liegt die erste Nutzung von "wireshark" bei mir schon recht lange zurück, weshalb ich nicht nicht mehr weis, auf welche Probleme ich im Anfang gestoßen bin. Ich kann mich aber daran erinnern, dass man vor einem USB-Sniffing erst mal per "sudo modprobe usbmon" nach einem ReBoot machen musste und die Zugehörigkeit zur Gruppe "wireshark" allein nicht ausgereicht hat.

Soweit ich mich erinnern kann, musste das zu sniffende Bus-Device auch erst mal für das Lesen freigeben. Wenn man bei "lsusb" z.B. das zu sniffende Gerät auf "Bus 001" gesehen hat, wäre ein "sudo chmod +rx /dev/usbmon1" sinnvoll. Eventuell muss man beim "Aufzeichnen ... mit diesem Filter" auch die USB Schnittstellen anhaken, damit sie einem zur Auswahl angezeigt werden.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3162

Wohnort: Köln

shiro schrieb:

Oha. Dann heißt es Lernkurve hochfahren.

Herzlichen Dank für Deine weiteren Hinweise.

Im Moment hänge ich noch an der Stelle, die Gruppe wireshark dem user hinzuzufügen, denn auch nach Installation von wireshark existiert diese noch nicht.

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1241

Im Moment hänge ich noch an der Stelle, die Gruppe wireshark dem user hinzuzufügen, denn auch nach Installation von wireshark existiert diese noch nicht.

Ja, kommt mir bekannt vor.

Hast du schon ein

sudo dpkg-reconfigure wireshark-common
sudo usermod -a -G wireshark  $USER
# bzw
sudo adduser $USER wireshark

gemacht? Bei "dpkg-reconfigure" solltest du die Frage "Sollen außer dem Superuser noch andere Benutzer Pakete mitschreiben können?" mit "Ja" beantworten. Wenn du darin ein Sicherheitsrisiko siehst, kannst du ja nach dem Sniffing den Befehl noch mal aufrufen und mit "Nein" beantworten.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3162

Wohnort: Köln

shiro schrieb:

Gehe bitte mal Schritt für Schritt diese Anleitung durch.

Ich habe jetzt alles darin abgearbeitet, und auch die Gruppe wireshark gefunden und dem Benutzer hinzugefügt.

Nun habe ich WireShark geöffnet und stehe nun im Wald. Also ich finde nicht die Stelle, wo ich das Sniffen von usbmon3 auswählen und starten kann. Ich sehe da nur "Netzwerk-Kram".

$ groups $USER
ich : ich adm dialout cdrom sudo dip plugdev lpadmin sambashare wireshark

$ lsmod | grep usbmon
usbmon                 45056  0

$ ls -l /dev/usbmon3
crw------- 1 root root 235, 3 Nov 14 17:44 /dev/usbmon3

$ lsusb -v -d 05e3:0142

Bus 003 Device 024: ID 05e3:0142 Genesys Logic, Inc. Multiple Slides Scanner-3600
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass       255 Vendor Specific Subclass
  bDeviceProtocol       255 Vendor Specific Protocol
  bMaxPacketSize0        64
  idVendor           0x05e3 Genesys Logic, Inc.
  idProduct          0x0142 Multiple Slides Scanner-3600
  bcdDevice            3.02
  iManufacturer           0 
  iProduct                0 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0027
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower               10mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0001  1x 1 bytes
        bInterval               8
cannot read device status, Resource temporarily unavailable (11)

Die letzte markierte Zeile deutet wohl genau das Problem an, welches ich untersuchen will.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3162

Wohnort: Köln

Der Screenshot dazu ...

Bilder

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1241

Ich sehe da nur "Netzwerk-Kram".

Ich habe mal zwei ScreenShots von mir beigefügt. Nach drücken der Schaltfläche "Alle Schnittstellen anzeigen" habe ich alle (auch USB) angehakt.

Wenn nach einem Doppelklick auf "usbmon3" bei dir die Meldung 'You do not have permission to capture on devide "usbmon3".' kommt, solltest du den oben beschriebenen "sudo chmod +rx /dev/usbmon3" Befehl ausführen und "wireshark" erneut starten.

$ ls -l /dev/usbmon3
crw------- 1 root root 235, 3 Nov 14 19:21 /dev/usbmon3
$ sudo chmod +rx /dev/usbmon3
[sudo] Passwort für shiro: 
$ $ ls -l /dev/usbmon3
crwxr-xr-x 1 root root 235, 3 Nov 14 19:21 /dev/usbmon3
$ 
Bilder

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3162

Wohnort: Köln

shiro schrieb:

Ich habe mal zwei ScreenShots von mir beigefügt. Nach drücken der Schaltfläche "Alle Schnittstellen anzeigen" habe ich alle (auch USB) angehakt.

Wenn ich da drauf klicke, kann ich nur "Externer Mitschnitt" und "Versteckte Schnittstellen anzeigen" anhaken. Dennoch sehe ich nur den gezeigten Teil der Schnittstellen, also die mit Icon, nix mit USB dabei zum anhaken. Wenn ich "Externer Mitschnitt" deaktiviere, bekomme ich auf gelbem Hintergrund angezeigt, dass mir die Berechtigungen fehlen.

Wenn nach einem Doppelklick auf "usbmon3" bei dir die Meldung 'You do not have permission to capture on devide "usbmon3".' kommt, solltest du den oben beschriebenen "sudo chmod +rx /dev/usbmon3" Befehl ausführen und "wireshark" erneut starten.

Auch das hilft nicht. ☹

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1241

Welche Version von "wireshark" verwendest du? Ich habe:

$ wireshark -v
Wireshark 4.2.2 (Git v4.2.2 packaged as 4.2.2-1.1build3).

Copyright 1998-2024 Gerald Combs <gerald@wireshark.org> and contributors.
Licensed under the terms of the GNU General Public License (version 2 or later).
This is free software; see the file named COPYING in the distribution. There is
NO WARRANTY; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiled (64-bit) using GCC 13.2.0, with GLib 2.80.0, with Qt 6.4.2, with
libpcap, with POSIX capabilities (Linux), with libnl 3, with zlib 1.3, with
PCRE2, with Lua 5.2.4, with GnuTLS 3.8.3 and PKCS #11 support, with Gcrypt
1.10.3, with Kerberos (MIT), with MaxMind, with nghttp2 1.59.0, with nghttp3
0.8.0, with brotli, with LZ4, with Zstandard, with Snappy, with libxml2 2.9.14,
with libsmi 0.4.8, with QtMultimedia, without automatic updates, with Minizip,
with binary plugins.

Running on Linux 6.8.0-48-generic, with Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
(with SSE4.2), with 7822 MB of physical memory, with GLib 2.80.0, with Qt 6.4.2,
with libpcap 1.10.4 (with TPACKET_V3), with zlib 1.3, with PCRE2 10.42
2022-12-11, with c-ares 1.27.0, with GnuTLS 3.8.3, with Gcrypt 1.10.3, with
nghttp2 1.59.0, with nghttp3 0.8.0, with brotli 1.1.0, with LZ4 1.9.4, with
Zstandard 1.5.5, with libsmi 0.4.8, with LC_TYPE=de_DE.UTF-8, binary plugins
supported.
$ 

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 3162

Wohnort: Köln

Jetzt klappt's.

Ich hatte vergessen, dass adduser ... ja ein erneutes Einloggen braucht, um wirksam zu werden.
Und sudo chmod +rx /dev/usbmon3 war auch nötig.

Jetzt sehe ich also den Verkehr am USB Bus 3, allerdings von allen Devices, die da dran hängen, z.B. meiner Maus.
Kannst Du mir noch einen Hinweis geben, wie ich das Device n bzw. mit der ID 05e3:0142 rausfiltere?

Version ist: 4.2.2 (Git v4.2.2 packaged as 4.2.2-1.1build3)

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1241

Kannst Du mir noch einen Hinweis geben, wie ich das Device n bzw. mit der ID 05e3:0142 rausfiltere?

Du solltest über Bus- und Device-Adresse filtern. Hierzu schaust du dir an, unter welcher Adresse die ID bei "lsusb" angezeigt wird.

Bus 003 Device 021: ID 05e3:0142 Genesys Logic, Inc. Multiple Slides Scanner-3600

Hier lohnt es sich nach "3.21.*" zu filtern. Da du die Kommunikation in beiden Richtungen sehen willst, sollte die Adresse für Source und Destination verwendet werden. Man kann dabei den gesamten String, einen Teilstring oder RegEx Definitionen verwenden.

Beim Filtern der Pakete kann man den Filter bereits beim Sniffen definieren oder den gesnifften Inhalt (z.B. nach Lesen der gespeicherten Daten) nachträglich filtern. Wie man das macht, hängt vom Fokus der Auswertung ab. Ich bevorzuge den kompletten Bus aufzunehmen und nachträglich zu filtern. Grund ist, dass die Device-Adressen durchaus wechseln können (z.B. bekommt eine wechselbare SD Karte im Smartphone eine dynamische Unterdevide-Adresse usw).

Wenn man nach dem Sniffen die Daten als ".pcapng" oder ".pcap" gesichert hat, kann man diese Daten später auswerten und in der "Filterzeile" entsprechende Queries eintragen. Bei dem obigen Beispiel wäre der Filter beispielsweise

(usb.src[0:4] == "3.21") || (usb.dst[0:4] == "3.21")

Wenn die Filter-Zeile einen grünen Hintergrund hat, ist er syntaktisch valide und kann mit dem Pfeil (rechts) hinter dem "X" aktiviert werden. Man bekommt dann auch die Kommunikation der Device-Sub-Adressen mit. Statt obiger Query kann man auch einfacher '(usb.addr[0:4] =="3.21")' schreiben, weil "addr" die "src" und "dst" beschreibt. Die Filter sind sehr mächtig. Spiele ein wenig mit ihnen, um zu sehen, wie sie funktionieren. Das alles hier zu beschreiben, würde den Rahmen sprengen.

Antworten |