วิธีการถ่ายโอนข้อมูลปริมาณการใช้ USB


9

ฉันมี USB gamepad และต้องการดูและตรวจสอบสัญญาณและคำสั่งที่อุปกรณ์ต่อพ่วงนี้จริง ๆ แล้วส่งไปยังพีซี / เคอร์เนลของฉัน: ฉันจะทำอย่างไร

ฉันคิดว่าเป็นอย่างนั้น

cat /dev/bus/usb/006/003

เพียงพอ แต่เห็นได้ชัดว่าคำสั่งนี้จะกลับมาทันทีและพิมพ์ตัวอักษรที่เข้ารหัสไม่ได้อ่านบางส่วน

มีวิธี "debug" อุปกรณ์ USB เช่นนั้นหรือไม่?

คำตอบ:


11

คุณสามารถจับภาพการรับส่งข้อมูล USB ด้วย Wireshark
จากวิกิ :

การถ่ายโอนข้อมูลการจราจร USB บน Linux คุณต้องusbmonโมดูลซึ่งมีมาตั้งแต่ Linux 2.6.11 ข้อมูลเกี่ยวกับโมดูลนั้นมีอยู่/usr/src/linux/Documentation/usb/usbmon.txtในแผนผังแหล่ง Linux ขึ้นอยู่กับการแจกจ่ายที่คุณใช้และรุ่นของการแจกจ่ายนั้นโมดูลนั้นอาจถูกสร้างไว้ในเคอร์เนลหรืออาจเป็นโมดูลที่โหลดได้ ถ้ามันเป็นโมดูลที่โหลดได้ขึ้นอยู่กับการกระจายที่คุณใช้และรุ่นของการกระจายนั้นมันอาจหรืออาจไม่ได้โหลดสำหรับคุณ หากเป็นโมดูลที่โหลดได้และไม่โหลดคุณจะต้องโหลดด้วยคำสั่ง

modprobe usbmon

ซึ่งจะต้องเรียกใช้เป็นรูต

libpcapเผยแพร่ก่อน 1.0 ไม่รวมถึงการสนับสนุน USB, ดังนั้นคุณจะต้องไม่น้อยกว่า libpcap 1.0.0

สำหรับรุ่นของเคอร์เนลก่อนหน้า 2.6.21กลไกการจับการรับส่งข้อมูล USB เท่านั้นที่มีอยู่เป็นกลไกแบบข้อความที่ จำกัด จำนวนข้อมูลทั้งหมดที่จับสำหรับแต่ละบล็อก USB ดิบให้มีขนาดประมาณ 30 ไบต์ ไม่มีวิธีที่จะเปลี่ยนแปลงสิ่งนี้โดยไม่ต้องแก้ไขเคอร์เนล หาก debugfs ยังไม่ได้เมา/sys/kernel/debugต์ให้ตรวจสอบว่าเมาท์นั้นอยู่ที่นั่นโดยเรียกใช้คำสั่งต่อไปนี้ในฐานะรูท:

mount -t debugfs / /sys/kernel/debug

สำหรับเคอร์เนลเวอร์ชัน2.6.21 และใหม่กว่ามีโพรโทคอลไบนารีสำหรับการติดตามแพ็คเก็ต USB ซึ่งไม่มีข้อ จำกัด ขนาดนั้น สำหรับเคอร์เนลเวอร์ชันนั้นคุณจะต้องใช้libpcap 1.1.0 หรือใหม่กว่าเนื่องจากการสนับสนุน USB ของ libpcap 1.0.x ใช้ แต่ไม่สามารถจัดการได้อย่างถูกต้องกลไกการแมปหน่วยความจำสำหรับการรับส่งข้อมูล USB ซึ่ง libpcap จะใช้หากไม่สามารถใช้ได้ ไม่สามารถใช้งานได้ดังนั้น libpcap จะใช้งานเสมอ

ในlibpcap 1.0.x อุปกรณ์สำหรับการจับภาพบน USB มีชื่อ usbn โดยที่ n คือจำนวนบัส ในlibpcap 1.1.0 และใหม่กว่าจะมีชื่อ usbmonn

นอกจากนี้คุณยังจะต้องมี Wireshark 1.2.x หรือใหม่กว่า


2

การอัปเดตเพราะนี่เป็นผลลัพธ์แรกที่ฉันพบเมื่อค้นหาข้อมูลนี้ วิธีที่ดีที่สุดที่ฉันพบใน Debian Stretch มีดังนี้:

# usbhid-dump --entity = all

ที่จะถ่ายโอนข้อมูลที่ได้รับจากอุปกรณ์ USB ทั้งหมด ยกคีย์บอร์ดของฉันขึ้นมาและฉันสามารถอ่าน opcode ทุกตัวในสตรีมได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.