LinuxでのUSBキャプチャ方法

Linuxの1の下のUSBキャプチャ方法
1は、カーネルのUSBモニターを有効にするように構成されました:

menuconfigを作るの
                   > -デバイスドライバ
                            のUSBサポート- >
                                     M *>を選択していない- USBモニターを
2、カーネル構築
    にsudo insmodの/lib/modules/3.2.1/kernel/drivers/usb/mon/usbmon.koを


カーネル実行を開始した後3、
                   #mount -t debugfsのnone_debugs / SYS /カーネル /デバッグを
                   
                   ディレクトリ/ SYS /カーネル/デバッグ/ USB / usbmonがあるかどうかをチェックするために
                   #ls / SYS /カーネル/デバッグ/ USB / usbmonは、

                   0U 1S、1T、1U 2S、2T 2U 3S 3Tの3U 0
                 
                  あなたはバス番号とデバイス番号のUSBデバイスを監視したい#のCAT / SYS /カーネル/デバッグ/ USB /デバイスを確認してください
                   ベンダー= 148F PRODID = 5370改訂:#選択が含ま = 1.01を段落
                   #次のように
                   #1 T:バス= 01Lev = 01 PRNT = 01ポート= 00 Cntを= 01 Devの番号= 2 Spdの= 480 MxCh = 0
                   #1 D:版= 2.00におけるC1s = 00(> IFC)サブ= 00 ProtのMXPS#00 = 64 = = CFGS 1つの。
                   #のP:ベンダー= 148F PRODID改訂= 1.01 = 5370
                   #1 S:メーカー= Ralink社
                   #S:商品= 802.11 N-WLAN
                   #1 S:のSerialNumber = 1.0
                   #1 C:*#IFSM = 1 CFG#1 = 1 ATR = 80 MxPwr = 450ミリアンペア。
                   #I:*場合#= 0アルト=のEPS = 0#5におけるC1s = FFサブ= FF Protの= FFドライバ= rtusbSTA(VEND。)。
                   #E:AD = 81(I)ATR = 02(バルク)MXPS = 512 IVL = 0msと
                   #E:AD = 01(O)ATR = 02(バルク)MXPS = 512 IVL = 0msと
                   #E:AD = 02(O) ATR = 02(バルク)MXPS = 512 IVL = 0msと
                   #E:AD = 03(O)ATR = 02(バルク)MXPS = 512 IVL = 0msと
                  #E:AD = 04(O)ATR = 02(バルク)MXPS = IVL = 0msと512
                   #バス01 =最初の行から分かるように、デバイス番号2であります
                   

図4に示すように、バス番号が1の場合、USB生のパケットを保存し、それはバス番号が2である場合、それはそうで2Uであり、かつ、1Uです。特殊なケースは、0Uモニタ表されるすべてのバス
                   IF(バス== 01)
                            須藤のCAT / SYSは/カーネル/デバッグ/ USB / usbmon / 1U> ./rt5370-UsbMon.txt
                   他IF(バス== 02)
                            須藤のCAT / SYS /カーネル/デバッグ/ USB / usbmon / 2U> ./rt5370-UsbMon.txt
パケットフォーマットの解析把握2、USB
ペリフェラル固有のドライバへのホスト製usbmonレポート要求の
コントローラドライバ(HCD)を。だから、HCD IFあるバギー、でトレースによって報告された
usbmonを正確にバストランザクションに対応しない場合があります。これは、同じ、でIS
のtcpdumpとAS状況。

報告されていますusbmon主な作品の上記の基本的な説明は、彼がUSBホストドライバは、すべての(usb_submit_urb)のHCD要求や(urb->完全すなわち、対応するコールバック関数を変更する要求)要求のコールバックの内容を送信するでしょう。


任意のテキストデータは、イベントは、そのようなasURBの提出(S)のストリームで構成形式、
URBコールバック(C)、提出エラー(E)。すべてのイベントが構成され、テキストライン、IS
空白で区切られた単語の。言葉の数や位置月に依存し
たイベント型ではなく、すべてのタイプのための共通の言葉のSETは、そこにある。
そうusb_submit_urbで、ここURB提出すなわち、対応するUSBホストドライバ(URB、mem_flags)
とURBコールバックにもバック機能オフ対応URB場合: urb->完全な
ので、私たちも、それらが同じであるURBタグ対応し、入力し、SのCのためのイベントのイベント型に近接して表示されます
彼らはURB同じ条件のためのものであるように。
三つを列子得た
eea76f80(II)の3474782286 S :. 1:003:-115 3:128 16 <
IIでedda2b80 3474786256 C :. 1:006:0.1:= 16 1 2fff0180 d6ef206eの1401020c 015aab73
共:.のe11c9280 3500399358 S 1:006 :0秒20 00 0000 0000 0007 7 = 370c0447 00401f
e11c9280 3500399866 CのCo:1:006:0 7>

ここで左から右に単語のリストは、次のとおりです。


-これはするために使用されURBタグはURBsを識別し、そして通常、ANは、カーネル内のアドレスである。
  HEXADECIMALでURB構造の、しかし、シーケンス番号または任意の可能な
  その他の固有の文字列、合理的な範囲。
通常分割されているUSBホストドライバでURBカーネルアドレス、一般的な機能によって割り当てられた:
URB usb_alloc_urb =(0、mem_flags)。

URBにポートに対応するので、同じポートは、それらのURBタグは同じです。
002e2002999116296 C CI:1:008: 0 0 4 = 8d2b0000

 Timestampinマイクロ秒、10進数を指定します。タイムスタンプの分解能は、
  利用可能なクロックに依存し、それはマイクロ秒よりもはるかに悪いことができます
  (実装は例えば、jiffy単位を使用している場合)。
e002e200 2999116296Ci:1:008:0 0 4 = 8d2b0000

注マイクロ秒。

- イベントタイプ。このタイプはイベントではなく、URB型の形式を指します。
  利用可能なタイプは次のとおりです。S -服従、C -コールバック、E -服従エラー。
e002e200 2999116296 C CI:1:008:0 0 4 = 8d2b0000

それの意味は次のとおりです。USBホストドライバがURBは、我々はすべてのUSB転送を知っusb_submit_urb機能によってlinuxusbコアに転送要求を提出し、ホストが最後に開始され、それがホストドライバ迷惑がURBのアクションを提出している必要があります

- 「住所」の単語(以前は「パイプ」)。それによって区切られた4つのフィールドで構成さ
  URBタイプと方向、バス番号、デバイスアドレス、エンドポイント番号:コロン。
  :タイプ及び方向は、次のように2バイトで符号化された
    CIのCo制御入力と出力
    ZiをZoとアイソクロナス入力と出力
    のIi Ioの割り込み入力と出力
    のBiボーバルク入出力
  バス番号、デバイスアドレス、およびエンドポイントは、小数点数であるが、彼らがあり
  、人間の読者のために、先頭にゼロを持っています。

次のようにそのため、アドレスフィールドの形式は次のとおりです。

URBの種類と方向:バス番号:デバイスアドレス:エンドポイント番号

列子は、以下:
C :. 1のe002e200 2999116296 CI:008:0 4 0 = 8d2b0000

ことを意味する:すべての転送は、エンドポイント0に制御されるので、入力バス番号1、デバイスアドレス008を制御し、最終的な0は、自然ポートです。

あるため、当社のキャプチャこのコマンドの、唯一のバス、同じバスに引っ掛かったが、我々は単に特定のUSBデバイスに焦点を当てた場合、USBデバイスの多くは、通常存在しているものを指定し、その後、私は注意を払う必要があることに留意すべきですデバイスアドレスフィールド、このフィールドを介して、我々はこの送信を区別することができますが送出され、我々は機器を監視するものではありません。

たとえば、次のセクションのUSBスニファログ:

edda2b80 3500379613 CのIi:1:006:1 0:1~8 = 0e06010d 08004700
edda2b80 3500394156 S II:1:006:1から115:1 16 <
eea76f80 3500394226 CのIi:1:003:3~0:128 16 = 01000800 a12a0000 00e1f505 00e1f505
eea76f80 3500394236 S II:1:3 -115:003 128 16 <

以下のUSB。1によるUSB、USBホストコントローラのうちの対応する1つに、バス同じバスであるが、後者はマウスUSBはあるが、デバイスアドレス006は、別のは、前者への割り込みUSBブルートゥースドングル送信され、対応する、003でありますそれらが同じバスの下にUSBハブに接続され、送信を中断。私たちは本当にあなたは、USBマウス干渉をすることはできませんので、ちょうどUSBのBluetoothドングルに耳を傾ける必要があります。

。 - URBのステータスワードは、これは手紙、または区切られた数字「いくつか」のどちらかである
  コロンで:URBステータス、時と違っ間隔ザ・、フレームを起動し、エラーCOUNT。
  ステータスで、「住所」のWord、すべてのフィールドの保存オプションの間隔が印刷されている。
  のみのために。URBsはフレーム割り込みとアイソクロナスだけのために印刷されて起動します
  。アイソクロナスURBsエラーカウントのみアイソクロナスコールバックのために印刷されて
  。イベント
1 "です。ここでの意味は、URBステータスワードで、二つの可能性、1は「文字」であるがありますデジタル、S」「旧一般が文字である場合は、」コントロール転送を表し、それがデジタルであれば、彼らは2例を形成します。

URBステータス:送信は次の形式で中断された場合の間隔、ステータスフィールドに注意を払うイベントの唯一のC型は理にかなって、イベントのSタイプを意味するものではありません。

同期伝送フォーマット場合は、次のように:URBステータス:間隔:{フレームを開始}:{エラーカウントを}

ステータスフィールドは表し時々負進数、である
  URBの「ステータス」フィールド。このフィールドは、提出のために意味をなさないが、
  パースでスクリプトを支援するために、とにかく存在しています。エラーが発生した場合、
  フィールドにはエラーコードが含まれています。
e002e200 2999116296 C CI:1:008:0 0 4 = 8d2b0000

ドメインステータス:ステータスは構造体URB構造体のstatusフィールドで、説明フィールドが正常に実行された直流USBリクエストです。コールバックが面白かったので、ときにのみ。

制御パケットの提出の場合、このフィールドはセットアップタグが含ま
  代わりの数字のグループを。セットアップタグがあるかどうかを言うのは簡単です
  、それは数になることはありませんので、本。スクリプトは数字のセット見つけた場合このように
  、この言葉では、彼らは(アイソクロナスURBsを除く)データ長を読み取るために進んでください。
  彼らは何かを見つけた場合は、文字のように、彼らは前にセットアップパケットを読み込む
  データ長やアイソクロナス記述子を読み込みます。
e002e200 2999116113 S CI:1:008:0のS C0 07 0000 1134 0004 4 <

文字「s」は、転送制御フラグであります

bmRequestTypeの、各のいずれか: -セットアップパケットは、存在する場合、5つのワードで構成
  一覧bRequest、wValue、wIndexが、wLengthの、USB仕様2.0で指定されました。
  これらの言葉は、セットアップタグは「S」だった場合デコードしても安全です。そうでない場合は、セットアップ
  パケットが存在していたが、撮影していない、とフィールドがフィラーを含んでいます。

次のようにトランスポート・パケット・フォーマットの、すなわち制御は次のとおりです。

bmRequestTypeの(要求タイプ):一覧bRequest(要求なし):wValue:wIndexが(添え字):wLengthの(データ・フィールドの長さは、そのないデータ・セグメントがないことを示す、0の場合)

006:株式会社e11c9280の3500399358のS :. 1。0 0000 0000 0007 00 S20 7 = 370c0447 00401f
共:.のe11c9280 3500399866 C 1:006:0 7 0> //上記伝送制御要求が成功したことを表し、7 btyeの実際の送信データのみをその状態および特定の送信位相制御に対応していない
コントロールの設定に対応2,000,000,000,000,007転送段、370c0447 00401f対応するデータ転送制御段(OUT転送)、7バイトのデータ長

-アイソクロナスフレーム記述子および記述子そのものの数。
  アイソクロナス転送イベント記述子のセットを有する場合、総数
  URBにおけるそれらの最初に印刷され、その後まで記述あたりワード、
  5の合計ワードが3コロンで区切られた十進数から成る
  ステータス、オフセットそれぞれ、長さ。提出のために、初期の長さが
  報告されています。コールバックの場合、実際の長さが報告されています。


-データが提出上の長さは、この長さのためにザが,. ISコールバックを要求した
  。これは実際の長さ
008:04 = 0 8d2b0000 C :. 1のE002e200 2999116296 CI
、以下:
edda2b80(II)の3500272851 S :. 1:006:-115 1。 :1 16 <
IIでedda2b80 3500273622 C :. 1:006:0.1:000100. 1. 7 = 13050147
最初のフィールドエンドポイントディスクリプタ、一般に16バイトのUSB割り込み転送要求、の長さを開始する要求は、この導管を示していますサポートされる最大パケットサイズ
番目の文は、実際のデータ送信要求割り込み復帰urb-対応のみ7バイトである> actual_lengthフィールド
転送の割り込みに対応する二つ以上

-月にusbmonのデータタグは、常に長さがゼロでない場合であっても、データをキャプチャしていない。
  データ・ワードが、このタグは、「=」である場合にのみ存在しているのは。
:. 1のE002e200 2999116296 C CI:008:0 0 4 = 8d2b0000
データタグは" =バック=「記号は、特定のデータ内容である「データセグメントを表し、」

-データ・ワードは、ビッグエンディアン16進形式で、従ってください。彼らはあることに注意してください
  機械の言葉ではないが、実際には単なるバイトストリームを作るための単語に分割
  読みすることが容易になります。このように、最後の言葉は、1〜4バイトから含まれていてもよいです。
  収集されたデータの長さが制限され、データ長よりも小さくすることができる
  データ長ワードに報告しました。アイソクロナス入力(ZI)の場合には
  、受信データがバッファにまばらである完了の長さ
  データので、収集されたデータは(データ長の値よりも大きくすることができる
  長さは、データワードに対し、受信されたバイトのみをカウント
  )全体の転送バッファが含まれています。
e002e200 2999116296 C CI:1:008:0 0 4 = 8d2b0000

例:
ポートのステータスを取得する入力制御転送。
:. 1のD5ea89a0 3575914555 S CI:001:0 S A3 00 0000 0003 00044 <
"A3 00 0000 0003 0004"制御送信に対応する"4"、コントロール転送のセットアップステージに対応位相データ長
5ea89a0 3575914560 C CI:1:001 :0 0 4 =0105万
相転移における送信データ制御データに対応し、「0105万」は4バイトのデータ長であります

出力バルク転送は、31バイトでSCSIコマンドの0x28(READ_10)を送信する
アドレス5に記憶装置へのバルクラッパー:

Sボー4128379752 dd65f0e8 :. 1:005:31は、2 -1150080万80010a28 = 55534243 ad000000 00000000 000000 20000000 20000040で
005:0 2 31> //の場合、バルク成功した送信要求を示し、また、実際の送信であるdd65f0e8 4128379808 Cボー:. 1 31バイトのデータ。

tcpdumpとスニッフィング3 USB
usbmonは、USBバス上のI / Oのトレースを収集するために使用されるカーネル内の施設です。usbmonは簡単に人間が読めるではない生のテキスト/バイナリを収集します。ここでは、アイデアは、フロントエンドは、これらのデータの判読可能な表現を生成するようWiresharkのを使用することです。しかしあるようWiresharkのはusbmon生データをサポートしていないので、私たちはPCAP形式でこれらのデータを解析する必要があります。tcpdumpがusbmonからUSBのデータをキャプチャし、PCAPトレースを生成するための良い候補であります

前提条件は、仕事のための最新のtcpdumpツールの必要性であるコンパイルしている、あなたがボードを押し下げするために直接ダウンロードすることができます使用することができます。また、独自のマニュアルをコンパイルすることができます。ここでは詳細ではありません。

ステップ:

マウント-t debugfsのnone_debugs / SYS /カーネル/デバッグ
 猫/ SYS /カーネル/デバッグ/ USB /デバイス确定USB的总线号
のtcpdump -D
1.eth0
2.usbmon1(USBバス番号1)
3.usbmon2(USBバス番号2 )
4.usbmon3(USBバス番号3)
すべてのインターフェイス上でキャプチャ5.any(仮想デバイス)
6.lo

出力の赤い部分よりも、あなたのtcpdumpがすでにインストールされ、正しく動作して下げます

-i -w /data/usblog.pcap&usbmon1 tcpdumpの
killallをtcpdumpの
wiresharkのusblog.pcap //それを見てのwiresharkを使用する最適なツール
チャート参照を下に、それがどのように見えるかを開きました。

 

参考資料:
W:\ wm8880 \アンドロイド\ ANDROID_3.4.5 \トランク\ドキュメント\ USB \ usbmon.txt
http://omappedia.org/wiki/USB_Sniffing_with_tcpdump
---------------- -----
著者:xiaojsj111
ソース:CSDNの
元ます。https://blog.csdn.net/xiaojsj111/article/details/14127607
著作権:この記事はブロガーオリジナル記事ですが、再現し、ボーエンのリンクを添付してください!

おすすめ

転載: www.cnblogs.com/Ph-one/p/10938479.html