Tôi đang cố gắng thiết kế lại một thiết bị usb (HID) và thực sự không thể hiểu được những gì tôi thấy trên wireshark (usbmon + wireshark trên linux hoặc windows) liên quan đến giao thức usb?. Tôi đã xem giao thức usb từ www.usb.org.
Wireshark thể hiện điều gì?
1) Một dòng trên mỗi gói? (mã thông báo, dữ liệu, bắt tay)
2) Một dòng trên mỗi giao dịch? (mã thông báo + [dữ liệu] + bắt tay) (phỏng đoán của tôi)
3) Một dòng trên mỗi lần kiểm soát chuyển?
Hướng của giao dịch cũng rất lạ (đến / từ các trường). Ít nhất, nó không phù hợp với mong đợi của tôi :-) ... Và phần dữ liệu của bảng liệt kê, ẩn báo cáo, v.v ... đôi khi dường như được hiển thị với dữ liệu thiết lập (8 byte) và đôi khi không ... tôi không Tôi thực sự không biết URB là gì ... không có gì đề cập đến trong giao thức usb như tôi có thể thấy ... Tôi thấy rằng dấu vết của wireshark / usbmon ở cấp độ ngăn xếp cao hơn và cố gắng suy luận xem điều gì sẽ xảy ra trên dây từ đó ...
Một ví dụ về những gì tôi có thể thấy được đưa ra dưới đây, những gì chúng ta thấy ở đây?.
a) Tôi thậm chí không thể tìm thấy bmtype = 0x20 (của thiết lập, khung No = 599) trong thông số kỹ thuật.
b) Vì tôi có thiết bị HID, tôi cho rằng đây có thể là cấu hình báo cáo / tính năng (bảng liệt kê được thông qua ở giai đoạn này). Vì vậy, tôi có thể đồng ý với hướng (máy chủ-> thiết bị). nhưng dữ liệu ở đâu? Hoặc không có giai đoạn dữ liệu ở đây? Khung 600 là gì?
c) khung 600 là gì? dữ liệu?
d) khung 601 là gì? trạng thái ACK? ... nhưng sau đó dữ liệu và ACK có cùng một nguồn không?
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 ............
Rõ ràng là tôi đang thiếu một cái gì đó. Một lời giải thích chung về cách hiển thị của wireshark liên quan đến giao thức và, (dựa trên nó), ý nghĩa của dấu vết trên được hoan nghênh!
Tôi đã đăng bài này lên Stack Overflow, nhưng được cho biết đây không phải là câu hỏi lập trình trực tiếp. Hy vọng nó phù hợp hơn ở đây.