*[[Network]]/Wireshark [#ca3229db] #contents **キャプチャーフィルタ [#hcc94c0d] Capture - Interface - Options にて キャプチャー対象のInterfaceをダブルクリックすることで、フィルターEdit画面を表示させる。~ BPF(Berkeley Packet Filter)構文で記述する(大概のパケットキャプチャーツールで使われている構文) |BGCOLOR(#f0f8ff):''種類''|BGCOLOR(#f0f8ff):''例''|BGCOLOR(#f0f8ff):''説明''| |Type|host、net、port|アドレスやポート番号の指定| |Dir|src、dst|方向を指定| |Proto|特定のプロトコル|ether、ip、tcp、udp、http、ftp| ***フィルタ例 [#g5755bdb] |BGCOLOR(#f0f8ff):''フィルタ''|BGCOLOR(#f0f8ff):''用途''| |src host <IP> and dst port <番号>|送信元が<IP>且つ宛先ポートが<番号>| |!ether host <MACアドレス>|<MACアドレス>以外| |icmp[0] == 8 or icmp[0] == 0|エコー要求またはエコー応答 &color(#ff0000){※1};| |icmp[0:2] == 0x0301|ICMPタイプ3、コード1(ホスト到達不能)&color(#ff0000){※2};| |tcp[13] & 32 == 32|URGフラグがセットされたTCPパケット &color(#ff0000){※3};| |tcp[13] & 16 == 16|ACKフラグがセットされたTCPパケット| |tcp[13] & 8 == 8|PSHフラグがセットされたTCPパケット| |tcp[13] & 4 == 4|RSTフラグがセットされたTCPパケット| |tcp[13] & 2 == 2|SYNフラグがセットされたTCPパケット| |tcp[13] & 1 == 1|FINフラグがセットされたTCPパケット| |tcp[13] == 18|TCP SYN-ACKパケット(SYNとACKのビットが両方立っているため、2 + 16 = 18 を指定している)| |broadcast|ブロードキャストトラフィック| &color(#ff0000){※1}; icmpパケットのタイプフィールドはパケットの一番先頭にあるのでオフセット位置として[0]を指定。Type8(エコー要求)Type0(エコー応答)~ &color(#ff0000){※2}; 0:2 は オフセット位置が 0 でオフセット位置からのデータの長さは 2 であることを示す。つまりオフセット0から始まる2byteのデータを比較してる~ &color(#ff0000){※3}; tcp[13]はbyte位置を示しておりbitの位置に直すと 13*8byte = 104bit になる。~ ビットの立ち方によって複数のフラグが同時に設定される為、& 記号を使用しビットの位置(ビット5が1⇒2^5=32)を指定している~ ~ #br **ディスプレイフィルタ [#o6154e0e] 表示するキャプチャーにフィルタをかける。Expression... をクリックすることでフィルタ例一覧を表示することが可能~ -フィルタの先頭に ! 付与で否定~ -and や or 条件で複数のフィルタを指定可能~ -フィルタしたパケットを保存するには、File - Export Specified Packets~ ***フィルタ例 [#u9127f9b] |BGCOLOR(#f0f8ff):''フィルタ''|BGCOLOR(#f0f8ff):''抽出されるパケット''| |frame.time > "時間"|指定した時間以降(frame.time > "2014-12-02 21:15")| |ip.addr==<IPアドレス>|指定したIPアドレス| |!tcp.port==<番号>|ポート番号が<番号>以外| |tcp.flags.syn==1|SYNフラグがセットされたTCPパケット| |tcp.flags.reset==1|RSTフラグがセットされたTCPパケット| |!arp|ARPトラフィック以外| |smtp or pop or imap|電子メールのトラフィック| |http.request.method==メソッド|指定したメソッド(GETやPOST)| |tcp contains 文字|指定した文字が含まれるパケット| |tcp.analysis.retransmission|TCPの再送(retransmission)のパケット| ~ #br **Statistics [#tba448d2] |BGCOLOR(#f0f8ff):''メニュー''|BGCOLOR(#f0f8ff):''説明''| |IO Graph|パケットの数、パケット容量を時間軸でグラフ表示する。ミリ秒単位でスパイクしているようなパケットを確認することも可能| |Flow Graph|通信のやりとりを矢印で視覚的に表示する| ~ #br **Analyze [#u44a9c08] ***Expert Infos [#jd246632] パケットを表示した状態で、[Analyze] - [Expert Info] を選択することで、パケットの情報を分析することが出来る~ タブの()内は重複パケットを含んだパケット数~ |BGCOLOR(#f0f8ff):''タブ''|BGCOLOR(#f0f8ff):''内容''|BGCOLOR(#f0f8ff):''説明''| |Error|-|パケットもしくはそれを解析した解析機構でエラーが発生した物| |Warning|Previous Segment Lost|パケット消失。データストリームにおいて期待されたシーケンス番号がスキップされた場合に発生| |~|ACKed Lost Packet|ACKパケットによって送達確認された筈のパケットが到達してない場合に発生| |~|Keep Alive|コネクションのキープアライブパケットが確認された| |~|Zero Window|TCP受信Windowサイズが一定値に達し、Zero Window通知が送られ、送信者にデータ送信を停止するように要求された場合に発生| |~|Out-of-Order|シーケンス番号により、受信したパケットのシーケンスの乱れが検知された| |~|Fast Retransmission|重複ACKから20ミリ秒以内に発生した再送信| |Note|TCP Retransmission|パケット消失の結果として発生。ACKが重複して受信された、またはパケットの再送タイマーがタイムアウトになった場合に発生| |~|Duplicate ACK|ホストが次に期待するシーケンス番号を受け取らなかった場合、最後に受信したデータの重複ACKを生成する| |~|Zero Window Probe|ゼロウィンドウパケットが送信された後に、TCP受信ウィンドウの状態を監視するのに使用| |~|Zero Window Probe ACK|Zero Window Probeパケットに応答が送信された| |~|Window is Full|受信者のTCP受信ウィンドウがいっぱいの状態であることを、送信元ホストに知らせる場合に発生| |~|Keep Alive ACK|キープアライブパケットに応答が送信された| |Chat|Window Update|TCP受信ウィンドウサイズが変更されたことを送信者に通知するために、受信者によって送信される| ~ #br **小技 [#x29bdc03] ***パケットをテキスト保存 [#ia2fc436] ファイル - エキスパートパケット解析 - プレインテキストとして~ ***TCPで、ホスト間で同一パケットを確認する [#e0052eab] Internet Protocol version 4 の Identification の値 が同じパケットを確認する~ ***ディスプレイフィールドのカラムを追加する [#d7706f4d] 任意のパケットを選択し、詳細表示の+を展開し、追加したいフィールドを右クリック「Applay As Columns」をクリックする。 任意のパケットを選択し、詳細表示の+を展開し、追加したいフィールドを右クリック「列として適用(Applay As Columns)」をクリックする。 ***パケットをダンプ出力 [#wd3157bc] Wiresharkインストールディレクトリにある tshark を利用する。 tshark -r キャプチャファイル -x ~ #br **用語 [#ec5acb54] ***ARPリクエスト [#jce4181c] 宛先のMACアドレスが不明な場合に、IPアドレスからMACアドレスを求めるに使われるプロトコル。~ 受信したポート以外の全ポートにフラッディングし、宛先IPアドレスが自分以外の場合はパケットを破棄し、宛先が自分であった場合はリプライする [ホストA] ARP [ホストB] 送信元IP :192.168.1.1 送信元IP :192.168.1.10 送信元MAC:F2:F2:F2:AA:BB:CC 送信元MAC:D5:D5:D5:DD:EE:FF ★自身のMACを埋め込んだパケットをリプライ 送信先IP :192.168.1.10 送信先IP :192.168.1.1 送信先MAC:? ⇒ FF:FF:FF:FF:FF:FF 送信先MAC:F2:F2:F2:AA:BB:CC ***gratuitous ARP [#p3e72671] IPアドレスは変更される場合が多々ある為、キャッシュに記憶されたIPアドレスとMACアドレスのマッピングが不整合になってしまう。~ これによる通信障害を防ぐ為、gratuitous ARPパケットが送信され、受け取った機器のキャッシュを新しいマッピング情報で強制的に更新する。~ GARPは一方的に送りつけられるものだが、受け取った側は結果としてARPキャッシュを更新する為、「gratuitous(勝手)」と名前についている。~ GARPヘッダはARPヘッダーと酷似しているが、送信元IPと、送信先IPが同一なのが異なる。~ ***イニシャルシーケンス番号(ISN) [#u6c59ffe] TCPのパケット送信はデータを分割して、相手がどこまで受信したか確認する。~ ヘッダに「シーケンス番号」を付与してパケット送信。~ 受信側は「シーケンス番号+受信データのバイト数」をACK番号として応答を返す。~ 受信側からきたACK番号が送信データより小さければ、その番号以降のデータが届いてないと判断しパケットを再送する。~ ***Windowサイズ [#d227b5c8] 受信側がACK応答を返すまでに溜め込めるバッファ容量。1パケット(MTUの値)毎にACK送信すると効率が悪い。~ そこでWindowサイズまで受信した後で、ACK送信することで効率化を図る。~ サーバーが輻輳しバッファが足りなくなると、Windowサイズを小さくするパケットをクライアント側に送信することで調整を行う。~ これ以上、受信できない場合は、zero windowパケットを送信する。~ ***TCP Retransmission [#ca1439b8] TCPの再送(相手からのACK応答が一定時間ない)を意味する。再送タイムアウトの時間を倍にして再送する。デフォルトでWindowsは5回。Linuxは15回再送する