Làm thế nào để đổ lưu lượng USB?


9

Tôi đã nhận được một gamepad USB và tôi muốn xem và kiểm tra các tín hiệu và lệnh mà thiết bị ngoại vi này thực sự đang gửi đến PC / kernel của tôi: làm thế nào tôi có thể làm điều đó?

Tôi đã giả định rằng một cái gì đó như

cat /dev/bus/usb/006/003

Đã đủ, nhưng rõ ràng lệnh này trả về ngay lập tức và in một số ký tự được mã hóa không thể đọc được.

Có cách nào để "gỡ lỗi" một thiết bị USB như vậy không?

Câu trả lời:


11

Bạn có thể chụp lưu lượng USB bằng Wireshark.
Từ wiki của nó :

Để kết xuất lưu lượng USB trên Linux, bạn cần usbmonmô-đun tồn tại từ Linux 2.6.11 . Thông tin về mô-đun đó có sẵn trong /usr/src/linux/Documentation/usb/usbmon.txtcây nguồn Linux. Tùy thuộc vào bản phân phối bạn đang sử dụng và phiên bản của bản phân phối đó, mô-đun đó có thể được tích hợp vào kernel hoặc có thể là mô-đun có thể tải; nếu đó là một mô-đun có thể tải, tùy thuộc vào bản phân phối bạn đang sử dụng và phiên bản của bản phân phối đó, nó có thể hoặc không thể được tải cho bạn. Nếu đó là một mô-đun có thể tải và không được tải, bạn sẽ phải tải nó bằng lệnh

modprobe usbmon

mà phải được chạy như root.

Bản phát hành libpcap trước 1.0 không bao gồm hỗ trợ USB, vì vậy bạn sẽ cần ít nhất libpcap 1.0.0 .

Đối với các phiên bản kernel trước 2.6,21 , cơ chế thu thập lưu lượng USB duy nhất có sẵn là cơ chế dựa trên văn bản giới hạn tổng lượng dữ liệu được ghi lại cho mỗi khối USB thô xuống còn khoảng 30 byte. Không có cách nào để thay đổi điều này mà không vá kernel. Nếu debugfs chưa được gắn vào /sys/kernel/debug, hãy đảm bảo rằng nó được gắn ở đó bằng cách ban hành lệnh sau dưới dạng root:

mount -t debugfs / /sys/kernel/debug

Đối với phiên bản kernel 2.6.21 trở lên , có một giao thức nhị phân để truy tìm các gói USB không có giới hạn kích thước đó. Đối với phiên bản kernel đó, bạn sẽ cần libpcap 1.1.0 hoặc mới hơn , vì hỗ trợ USB libpcap 1.0.x sử dụng, nhưng không xử lý chính xác, cơ chế ánh xạ bộ nhớ cho lưu lượng USB, libpcap sẽ sử dụng nếu có - không thể không có sẵn, vì vậy libpcap sẽ luôn sử dụng nó.

Trong libpcap 1.0.x, các thiết bị để chụp trên USB có tên usbn, trong đó n là số lượng xe buýt. Trong libpcap 1.1.0 trở lên, chúng có tên usbmonn.

Bạn cũng sẽ cần một Wireshark 1.2.x hoặc mới hơn .


1

Cập nhật vì đây là kết quả đầu tiên tôi tìm thấy khi tôi tìm kiếm nó. Phương pháp tốt nhất tôi tìm thấy trên Debian Stretch như sau:

# usbhid-dump --entity = tất cả

Điều đó sẽ kết xuất dữ liệu đến từ tất cả các thiết bị USB. Chọn bàn phím của tôi như một điều trị và tôi có thể đọc mọi opcode trong luồng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.