Bagaimana cara membuang lalu lintas USB?

9

Saya mendapat gamepad USB dan saya ingin melihat dan memeriksa sinyal dan perintah yang dikirimkan periferal ini ke PC / kernel saya: bagaimana saya bisa melakukannya?

Saya berasumsi seperti itu

cat /dev/bus/usb/006/003

Sudah cukup, tetapi rupanya perintah ini segera kembali dan mencetak beberapa karakter dikodekan yang tidak dapat dibaca.

Ada cara untuk "men-debug" perangkat USB seperti itu?

pengguna2485710
sumber

Jawaban:

11

Anda dapat menangkap lalu lintas USB dengan Wireshark.
Dari itu wiki :

Untuk membuang lalu lintas USB di Linux, Anda memerlukan usbmonmodul, yang sudah ada sejak Linux 2.6.11 . Informasi tentang modul itu tersedia di /usr/src/linux/Documentation/usb/usbmon.txtdalam pohon sumber Linux. Bergantung pada distribusi yang Anda gunakan, dan versi distribusi itu, modul itu mungkin dibangun ke dalam kernel, atau mungkin modul yang dapat dimuat; jika ini adalah modul yang dapat dimuat, tergantung pada distribusi yang Anda gunakan, dan versi distribusi itu, mungkin atau mungkin tidak dimuat untuk Anda. Jika ini adalah modul yang dapat dimuat, dan tidak dimuat, Anda harus memuatnya dengan perintah

modprobe usbmon

yang harus dijalankan sebagai root.

rilis libpcap sebelum 1.0 tidak termasuk dukungan USB, jadi Anda memerlukan setidaknya libpcap 1.0.0 .

Untuk versi kernel sebelum 2.6.21 , satu-satunya mekanisme penangkapan lalu lintas USB yang tersedia adalah mekanisme berbasis teks yang membatasi jumlah total data yang ditangkap untuk setiap blok USB mentah hingga sekitar 30 byte. Tidak ada cara untuk mengubah ini tanpa menambal kernel. Jika debugfs belum terpasang /sys/kernel/debug, pastikan sudah dipasang di sana dengan mengeluarkan perintah berikut sebagai root:

mount -t debugfs / /sys/kernel/debug

Untuk kernel versi 2.6.21 dan yang lebih baru , ada protokol biner untuk melacak paket USB yang tidak memiliki batasan ukuran itu. Untuk versi kernel itu, Anda akan memerlukan libpcap 1.1.0 atau yang lebih baru , karena dukungan USB libpcap 1.0.x menggunakan, tetapi tidak menangani dengan benar, mekanisme pemetaan memori untuk lalu lintas USB, yang akan digunakan libpcap jika tersedia - tidak mungkin dibuat tidak tersedia, jadi libpcap akan selalu menggunakannya.

Di libpcap 1.0.x, perangkat untuk menangkap pada USB memiliki nama usbn, di mana n adalah jumlah bus. Di libpcap 1.1.0 dan yang lebih baru, mereka memiliki nama usbmonn.

Anda juga membutuhkan Wireshark 1.2.x atau yang lebih baru .

Costin Gușă
sumber
1

Memperbarui karena ini adalah hasil pertama yang saya temukan ketika saya melihat ini. Metode terbaik yang saya temukan di Debian Stretch adalah sebagai berikut:

# usbhid-dump --entity = all

Itu akan membuang data yang masuk dari semua perangkat USB. Mengambil keyboard saya seperti hadiah, dan saya bisa membaca setiap opcode di aliran.

cntra
sumber