explications sur les traces USB wireshark

J'essaie de désosser un périphérique USB (HID) et je ne peux pas vraiment comprendre comment ce que je vois sur wireshark (usbmon + wireshark sur linux ou Windows) se rapporte au protocole USB?. J'ai regardé le protocole USB de www.usb.org .

Que montre wireshark ?

1) Une ligne par paquet ? (jeton, données, poignée de main)

2) Une ligne par transaction ? (jeton + [données] + poignée de main) (ma supposition)

3) Une ligne par transfert de contrôle ?

Le la direction de la transaction est également très étrange (vers / depuis les champs). Au moins, cela ne correspond pas à mes attentes :-)... Et la partie données de l'énumération, le rapport hid, etc... semble parfois être affiché avec les données de configuration (8 octets) et parfois non... Je ne sais pas vraiment ce qu'est URB... il n'y a aucune mention de cela dans le protocole USB pour autant que je puisse voir... Il me semble que wireshark / usbmon trace à un niveau de pile plus élevé et essaie de déduire ce qui serait sur le fil de que...

Un exemple de ce que je peux voir est donné ci-dessous, que voir ici?.

A) Je n'ai même pas trouvé bmtype = 0x20 (de la configuration, numéro de trame = 599) dans les spécifications.

B) Parce que j'ai un périphérique HID, j'ai supposé que cela pourrait être une configuration de rapport / fonctionnalité (l'énumération est passée à ce stade). Je pourrais donc être d'accord avec la direction (hôte -> périphérique). mais où sont les données ? Ou il n'y a pas de phase de données ici? Qu'est-ce que le cadre 600 alors?

C) qu'est-ce que la trame 600 ? les données ?

D) qu'est-ce que c'est cadre 601? un ACK de statut?... mais alors les données et ACK ont la même source?

No.     Time        Source                Destination           Protocol Length Info
    599 67.996889   host                  2.0                   USB      36     URB_CONTROL out

Frame 599: 36 bytes on wire (288 bits), 36 bytes captured (288 bits)
USB URB
    USBPcap pseudoheader length: 28
    IRP ID: 0xfffffa800a1e2610
    IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
    URB Function: URB_FUNCTION_CLASS_DEVICE (0x001a)
    IRP information: 0x00, Direction: FDO -> PDO
    URB bus id: 1
    Device address: 2
    Endpoint: 0x00, Direction: OUT
    URB transfer type: URB_CONTROL (0x02)
    Packet Data Length: 8
    Control transfer stage: Setup (0)
    [Response in: 601]
    [bInterfaceClass: Unknown (0xffff)]
URB setup
    bmRequestType: 0x20
        0... .... = Direction: Host-to-device
        .01. .... = Type: Class (0x01)
        ...0 0000 = Recipient: Device (0x00)
    bRequest: 0
    wValue: 0x0000
    wIndex: 0
    wLength: 16

0000  1c 00 10 26 1e 0a 80 fa ff ff 00 00 00 00 1a 00   ...&............
0010  00 01 00 02 00 00 02 08 00 00 00 00 20 00 00 00   ............ ...
0020  00 00 10 00                                       ....

No.     Time        Source                Destination           Protocol Length Info
    600 67.997889   2.0                   host                  USB      44     URB_CONTROL out

Frame 600: 44 bytes on wire (352 bits), 44 bytes captured (352 bits)
USB URB
    USBPcap pseudoheader length: 28
    IRP ID: 0xfffffa800a1e2610
    IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
    URB Function: URB_FUNCTION_CONTROL_TRANSFER (0x0008)
    IRP information: 0x01, Direction: PDO -> FDO
    URB bus id: 1
    Device address: 2
    Endpoint: 0x00, Direction: OUT
    URB transfer type: URB_CONTROL (0x02)
    Packet Data Length: 16
    Control transfer stage: Data (1)
    [Request in: 599]
    [Time from request: 0.001000000 seconds]
    [bInterfaceClass: Unknown (0xffff)]
CONTROL response data

0000  1c 00 10 26 1e 0a 80 fa ff ff 00 00 00 00 08 00   ...&............
0010  01 01 00 02 00 00 02 10 00 00 00 01 05 04 0d 56   ...............V
0020  fb 82 c0 1d 10 18 cc 02 00 00 00 01               ............

No.     Time        Source                Destination           Protocol Length Info
    601 67.997889   2.0                   host                  USB      28     GET STATUS Status

Frame 601: 28 bytes on wire (224 bits), 28 bytes captured (224 bits)
USB URB
    USBPcap pseudoheader length: 28
    IRP ID: 0xfffffa800a1e2610
    IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
    URB Function: URB_FUNCTION_CONTROL_TRANSFER (0x0008)
    IRP information: 0x01, Direction: PDO -> FDO
    URB bus id: 1
    Device address: 2
    Endpoint: 0x00, Direction: OUT
    URB transfer type: URB_CONTROL (0x02)
    Packet Data Length: 0
    Control transfer stage: Status (2)
    [Request in: 599]
    [Time from request: 0.001000000 seconds]

0000  1c 00 10 26 1e 0a 80 fa ff ff 00 00 00 00 08 00   ...&............
0010  01 01 00 02 00 00 02 00 00 00 00 02               ............

Il me manque évidemment quelque chose. Une explication générale sur la façon dont l'affichage wireshark se rapporte au protocole et, (sur cette base), la signification de la trace ci-dessus est la bienvenue!

J'ai initialement posté ceci sur Stack Overflow, mais on m'a dit que ce n'était pas directement une question de programmation. J'espère que ça va mieux ici.

demandé sur