gpt4 book ai didi

python - USB - 主机和设备之间是否有初始握手?

转载 作者:行者123 更新时间:2023-12-01 02:03:58 24 4
gpt4 key购买 nike

我正在智能卡读卡器上使用 Wireshark 捕获 USB 流量。当我使用 PyScard 连接到读卡器时,在我仅通过建立连接发送任何 APDU 之前,会使用批量操作来回发送一些数据包。

我已阅读here USB 设备和主机之间有一个初始握手,我想知道这是否是我在嗅探时看到的。

使用wireshark,我得到以下信息:

  1. 批量输出(主机到设备):

First packet

  • 批量输出(设备到主机):
  • Second packet

  • 批量输入(主机到设备):
  • third

  • 批量输入(设备到主机):
  • Fourth packet

    这四个数据包发送 2-3 次,然后我可以使用 PyScard 嗅探我发送的消息。

    我的目标是仅使用 USB 通信来重现读取器和主机之间的通信。所以:

    1. USB 通信中是否存在初始握手?

    2. 这就是我正在捕捉的内容吗?

    3. 如何重现此 USB 通信?

    谢谢<3


    编辑 2018 年 3 月 14 日 - David Grayson 回答后的其他信息

    我在这里捕获的不是“获取设备描述符”等的部分。当我尝试打印设备的详细信息并且 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

    (截图还可以,看起来很像,但又不一样)

    最佳答案

    初始握手包括“获取设备描述符”、“获取配置描述符”和“设置地址”等控制传输,这些传输在 USB 2.0 规范第 9 章中定义。

    初始握手通常没有任何批量传输,但您的设备可能使用一个驱动程序,该驱动程序希望在初始化时进行一些批量传输。由于它是一个智能卡读卡器,我想您的操作系统有一些驱动程序可以向其发送命令,以查看是否连接了任何智能卡,并且这些命令可以很好地通过批量传输而不是控制传输来实现。要了解有关这些命令的更多信息,您需要找到您的设备实现的 USB 类和/或发送这些命令的驱动程序的文档。

    您的大流量描述令人困惑。术语“Out”始终表示“主机到设备”,因此它不能同时表示“设备到主机”。术语“In”始终表示“设备到主机”,因此它不能也表示“主机到设备”。您发布了两个重复的屏幕截图。

    为了将来获得更好的响应,我认为您应该包含设备描述符的转储 (lsusb -v),改进对流量的描述,说明在哪些端点上看到流量,并说明您正在使用的操作系统,并提供有关设备所连接的驱动程序的所有信息。

    关于python - USB - 主机和设备之间是否有初始握手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49260118/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com