USB - Есть ли начальное рукопожатие между хостом и устройством?

Я перехватываю трафик USB с помощью Wireshark на считывателе смарт-карт. Когда я подключаюсь к читателю с помощью PyScardнекоторые пакеты отправляются туда и обратно с использованием массовых операций, прежде чем я отправлю какой-либо APDU, просто установив соединение.

Я прочитал здесь, что между устройством USB и хостом происходит первоначальное рукопожатие, и мне интересно, вижу ли я это, когда нюхаю.

Используя wireshark, я получаю следующее:

  1. Bulk out (хост на устройство):

Первый пакет

  1. Bulk out (устройство для размещения):

Второй пакет

  1. Основная часть (хост на устройство):

в третьих

  1. Массовая загрузка (с устройства на хост):

Четвертый пакет

Эти четыре пакета отправляются 2-3 раза, и затем я могу прослушать сообщения, отправленные с помощью PyScard.

Моя цель здесь - воспроизвести связь между читателем и хостом, используя только связь USB. Так:

  1. Есть ли начальное рукопожатие в связи USB?

  2. Это то, что я снимаю?

  3. Как я могу воспроизвести эту связь USB?

Спасибо <3


Изменить 14/03/2018 - Дополнительная информация после ответа Дэвида Грейсона

То, что я собираю здесь, не является частью "Get Device Descriptor" и т. Д. Это происходит, когда я пытаюсь распечатать детали устройства, и Wireshark распознает и помечает пакеты как таковые.

Я знаю о странных операциях, но это то, что я получаю от Wireshark. Интерпретация, которую я делаю, заключается в том, что они представляют собой пары запрос-ответ: хост отправляет что-либо с использованием конечной точки массового вывода, а затем просит прочитать ответ с использованием массового вывода в конечной точке, когда он готов сделать это. Я понятия не имею, это то, что мне кажется.

>> lsusb -v

Bus 001 Device 002: ID 0bda:0165 Realtek Semiconductor Corp. 
Couldn't open device, some information will be missing
Device Descriptor:

    bLength                
    bDescriptorType         1
    bcdUSB               2.00
    bDeviceClass            0 (Defined at Interface level)
    bDeviceSubClass         0 
    bDeviceProtocol         0 
    bMaxPacketSize0        64
    idVendor           0x0bda Realtek Semiconductor Corp.
    idProduct          0x0165 
    bcdDevice           61.23
    iManufacturer           1 
    iProduct                6 
    iSerial                 3 
    bNumConfigurations      1

Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           93
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          4 
        bmAttributes         0xa0
          (Bus Powered)
          Remote Wakeup
        MaxPower              500mA

Interface Descriptor:
    bLength                 9
    bDescriptorType         4
    bInterfaceNumber        0
    bAlternateSetting       0
    bNumEndpoints           3
    bInterfaceClass        11 Chip/SmartCard
    bInterfaceSubClass      0 
    bInterfaceProtocol      0 
    iInterface              6 

ChipCard Interface Descriptor:
    bLength                54
    bDescriptorType        33
    bcdCCID              1.10  (Warning: Only accurate for version 1.0)
    nMaxSlotIndex           0
    bVoltageSupport         7  5.0V 3.0V 1.8V 
    dwProtocols             3  T=0 T=1
    dwDefaultClock       3750
    dwMaxiumumClock      7500
    bNumClockSupported      0
    dwDataRate          10080 bps
    dwMaxDataRate      312500 bps
    bNumDataRatesSupp.      0
    dwMaxIFSD             254
    dwSyncProtocols  00000000 
    dwMechanical     00000000 
    dwFeatures       00010030
    Auto clock change
    Auto baud rate change
    TPDU level exchange
    dwMaxCCIDMsgLen       271
    bClassGetResponse      00
    bClassEnvelope         00
    wlcdLayout           none
    bPINSupport             0 
    bMaxCCIDBusySlots       1

Endpoint Descriptor:
    bLength                 7
    bDescriptorType         5
    bEndpointAddress     0x83  EP 3 IN
    bmAttributes            3
      Transfer Type            Interrupt
      Synch Type               None
      Usage Type               Data
    wMaxPacketSize     0x0040  1x 64 bytes
    bInterval               8

Endpoint Descriptor:
    bLength                 7
    bDescriptorType         5
    bEndpointAddress     0x05  EP 5 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     0x86  EP 6 IN
    bmAttributes            2
      Transfer Type            Bulk
      Synch Type               None
      Usage Type               Data
    wMaxPacketSize     0x0200  1x 512 bytes
    bInterval               0

(Снимки экрана в порядке, они похожи, но они не одинаковы)

1 ответ

Решение

Начальное рукопожатие состоит из передач управления, таких как "Получить дескриптор устройства", "Получить дескриптор конфигурации" и "Установить адрес", которые определены в главе 9 спецификации USB 2.0.

Первоначальное рукопожатие обычно не имеет массовых передач, но возможно, что ваше устройство использует драйвер, который хочет выполнить некоторые массовые передачи при инициализации. Поскольку это устройство чтения смарт-карт, я полагаю, что в вашей операционной системе есть какой-то драйвер, который отправляет ей команды, чтобы посмотреть, подключены ли какие-либо смарт-карты, и эти команды вполне могут быть реализованы с помощью групповых передач вместо передач управления. Чтобы узнать больше об этих командах, вам понадобится найти документацию по классу USB, который реализует ваше устройство, и / или драйвер, отправляющий эти команды.

Описание вашего массового трафика сбивает с толку. Термин "Out" всегда означает "хост-устройство", поэтому он также не может означать "устройство-хост". Термин "В" всегда означает "устройство на хост", поэтому он также не может означать "хост на устройство". Вы разместили два дублирующих скриншота.

Чтобы получить лучшие ответы в будущем, я думаю, что вы должны включить дамп дескрипторов вашего устройства (lsusb -v), улучшите свое описание трафика, скажите, на каких конечных точках был замечен трафик, а также скажите, какую операционную систему вы используете, и предоставьте любую имеющуюся информацию о драйверах, подключенных к вашему устройству.

Другие вопросы по тегам