USB - 主机和设备之间是否有初始握手?
USB - Is there an initial handshake between host and device?
我正在智能卡 reader 上使用 Wireshark
捕获 USB 流量。当我使用 PyScard
连接到 reader 时,在我仅通过建立连接发送任何 APDU 之前,使用批量操作来回发送一些数据包。
我读到 here USB 设备和主机之间有一个初始握手,我想知道这是否是我在嗅探时看到的。
使用 wireshark,我得到以下信息:
- 批量输出(主机到设备):
- 批量输出(设备到主机):
- 批量输入(主机到设备):
- 批量输入(设备到主机):
这四个数据包发送了 2-3 次,然后我可以嗅探我使用 PyScard 发送的消息。
我的目标是仅使用 USB 通信重现 reader 与主机之间的通信。所以:
USB通信有初始握手吗?
这是我捕捉的吗?
如何重现此 USB 通信?
谢谢 <3
编辑 14/03/2018 - David Grayson 回答后的附加信息
我在这里捕获的不是“获取设备描述符”等部分。当我尝试打印设备的详细信息并且 Wireshark 识别并标记数据包时会发生这种情况。
我知道奇怪的操作,但这是我从 wireshark 得到的。我一直在做的解释是它们是请求-响应对:主机使用 bulk out 端点发送一些东西,然后在准备好时使用 bulk in 端点请求读取答案。我完全不知道,这就是我看起来的样子。
>> 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
(截图还可以,长得像但又不一样)
初始握手包括 "Get Device Descriptor"、"Get Configuration Descriptor" 和 "Set Address" 等控制传输,它们在 USB 2.0 规范的第 9 章中定义。
初始握手通常没有任何批量传输,但您的设备可能使用了一个驱动程序,该驱动程序希望在初始化时进行一些批量传输。由于它是智能卡 reader,我想你的操作系统有一些驱动程序可以向它发送命令以查看是否连接了任何智能卡,并且这些命令很可能通过批量传输而不是控制来实现转移。要了解有关这些命令的更多信息,您需要找到您的设备实现的 USB class 的文档 and/or 发送这些命令的驱动程序。
您对批量流量的描述令人困惑。术语 "Out" 始终表示 "Host to device",因此它不能表示 "Device to host"。术语 "In" 始终表示 "Device to host",因此它不能表示 "Host to device"。您发布了两个重复的屏幕截图。
为了在未来获得更好的响应,我认为您应该包含设备描述符的转储 (lsusb -v
),改进您对流量的描述,说明在哪些端点上看到了流量,以及说出您使用的是什么操作系统,并提供您所掌握的关于连接到您设备的驱动程序的任何信息。
我正在智能卡 reader 上使用 Wireshark
捕获 USB 流量。当我使用 PyScard
连接到 reader 时,在我仅通过建立连接发送任何 APDU 之前,使用批量操作来回发送一些数据包。
我读到 here USB 设备和主机之间有一个初始握手,我想知道这是否是我在嗅探时看到的。
使用 wireshark,我得到以下信息:
- 批量输出(主机到设备):
- 批量输出(设备到主机):
- 批量输入(主机到设备):
- 批量输入(设备到主机):
这四个数据包发送了 2-3 次,然后我可以嗅探我使用 PyScard 发送的消息。
我的目标是仅使用 USB 通信重现 reader 与主机之间的通信。所以:
USB通信有初始握手吗?
这是我捕捉的吗?
如何重现此 USB 通信?
谢谢 <3
编辑 14/03/2018 - David Grayson 回答后的附加信息
我在这里捕获的不是“获取设备描述符”等部分。当我尝试打印设备的详细信息并且 Wireshark 识别并标记数据包时会发生这种情况。
我知道奇怪的操作,但这是我从 wireshark 得到的。我一直在做的解释是它们是请求-响应对:主机使用 bulk out 端点发送一些东西,然后在准备好时使用 bulk in 端点请求读取答案。我完全不知道,这就是我看起来的样子。
>> 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
(截图还可以,长得像但又不一样)
初始握手包括 "Get Device Descriptor"、"Get Configuration Descriptor" 和 "Set Address" 等控制传输,它们在 USB 2.0 规范的第 9 章中定义。
初始握手通常没有任何批量传输,但您的设备可能使用了一个驱动程序,该驱动程序希望在初始化时进行一些批量传输。由于它是智能卡 reader,我想你的操作系统有一些驱动程序可以向它发送命令以查看是否连接了任何智能卡,并且这些命令很可能通过批量传输而不是控制来实现转移。要了解有关这些命令的更多信息,您需要找到您的设备实现的 USB class 的文档 and/or 发送这些命令的驱动程序。
您对批量流量的描述令人困惑。术语 "Out" 始终表示 "Host to device",因此它不能表示 "Device to host"。术语 "In" 始终表示 "Device to host",因此它不能表示 "Host to device"。您发布了两个重复的屏幕截图。
为了在未来获得更好的响应,我认为您应该包含设备描述符的转储 (lsusb -v
),改进您对流量的描述,说明在哪些端点上看到了流量,以及说出您使用的是什么操作系统,并提供您所掌握的关于连接到您设备的驱动程序的任何信息。