USB トラフィックをダンプするにはどうすればいいですか?

USB トラフィックをダンプするにはどうすればいいですか?

USB ゲームパッドを入手したのですが、この周辺機器が実際に PC/カーネルに送信している信号とコマンドを確認して検査したいのですが、どうすればよいですか?

私は次のようなことを想定していました

cat /dev/bus/usb/006/003

十分でしたが、どうやらこのコマンドはすぐに返され、判読できないエンコードされた文字がいくつか出力されます。

そのような USB デバイスを「デバッグ」する方法はありますか?

答え1


WiresharkでUSBトラフィックをキャプチャすることができます。ウィキ:

usbmonLinuxでUSBトラフィックをダンプするには、 Linuxの頃から存在するモジュールが必要です。2.6.11. そのモジュールに関する情報は、Linux ソースツリーで入手できます/usr/src/linux/Documentation/usb/usbmon.txt。使用しているディストリビューションとそのバージョンによっては、そのモジュールがカーネルに組み込まれている場合もあれば、ロード可能なモジュールである場合もあります。ロード可能なモジュールの場合、使用しているディストリビューションとそのバージョンによっては、自動的にロードされる場合とされない場合があります。ロード可能なモジュールであるにもかかわらずロードされていない場合は、次のコマンドでロードする必要があります。

modprobe usbmon

これは root として実行する必要があります。

libpcap 1.0より前のリリースにはUSBサポートが含まれていないため、少なくともlibpcap1.0.0

カーネルのバージョン2.6.21 より前では、利用可能な唯一の USB トラフィック キャプチャ メカニズムは、各生の USB ブロックでキャプチャされるデータの合計量を約 30 バイトに制限するテキストベースのメカニズムです。カーネルにパッチを適用せずにこれを変更する方法はありません。debugfs が にマウントされていない場合は/sys/kernel/debug、次のコマンドを root として発行して、そこにマウントされていることを確認します。

mount -t debugfs / /sys/kernel/debug

カーネルバージョン2.6.21以降、USBパケットをトレースするためのバイナリプロトコルがあり、サイズ制限はありません。そのカーネルバージョンでは、libpcapが必要です。1.1.0以降libpcap 1.0.x USB サポートは USB トラフィックのメモリマップ メカニズムを使用しますが、正しく処理しません。libpcap は、使用可能な場合はこれを使用します。これを使用不可にすることはできないため、libpcap は常にこれを使用します。

libpcap 1.0.xでは、USBキャプチャ用のデバイスは という名前で、usbnバスの番号です。libpcap 1.1.0 以降では、 という名前になります。usbmonn

Wiresharkも必要になります1.2.x 以降

答え2

調べたときに最初に見つかった結果がこれだったので更新します。Debian Stretch で見つけた最良の方法は次のとおりです。

# usbhid-dump --entity=all

これにより、すべての USB デバイスから受信したデータがダンプされます。キーボードを手に取って、ストリーム内のすべてのオペコードを読み取ることができます。

関連情報