「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[監視・パケット解析編]]
--[[電文を確認する方法(パケット・キャプチャ)]]

* 目次 [#u9cf3965]
#contents

*概要 [#e89ee161]
-OSSソフトウェアLANアナライザであるWiresharkの操作方法を説明する。
-元ネタが古く、wireshark-setup-0.99.7.exeを使用している(操作方法は大きく変わっていないと思う)。

*Wiresharkの特徴 [#g325bafe]
**区分 [#tc00de21]
LANアナライザには、以下の区分がある。

#ref(ClassificationOfLanAnalyzer.png,left,nowrap,LANアナライザの区分)

**区分ごとの特徴 [#ifd638ff]
これらのLANアナライザには、それぞれ以下のような区分がある。

-LANアナライザの区分毎の特徴
|#|区分|>|特徴|h
|1|ハードウェア&br;LANアナライザ|長所|持ち運びが容易。下位レイヤのトラブルシュートに優れるため、ケーブル品質の調査、エラーフレームの測定が可能。|
|~|~|短所|ソフトウェアLANアナライザと比べ、統計・レポート出力、しきい値の設定と警告の出力、パケットの分析などの機能が劣る。|
|~|~|価格|一般的に高価である。|
|2|商用ソフトウェア&br;LANアナライザ|長所|統計・レポート出力、しきい値の設定と警告の出力などの機能が優れている。|
|~|~|短所|NICドライバでキャプチャ可能である必要があるので、下位レイヤのトラブルシュートが難しい。|
|~|~|価格|一般的に高価である。|
|3|OSSソフトウェアLANアナライザ|長所|プロトコル毎のパケットの分析機能に関しては、商用アナライザを凌ぐ(バージョンアップの頻度の多さも強み)。|
|~|~|短所|NICドライバでキャプチャ可能である必要があるので、下位レイヤのトラブルシュートが難しい。|
|~|~|価格|無償で利用可能。|

-Wiresharkは、OSSソフトウェアLANアナライザ。~
下位レイヤの、ケーブル品質の調査、エラーフレームの測定などの用途には利用できない。

*インストール [#qf44684f]
**ダウンロード [#t657fcc8]
以下からWindows版のWiresharkのインストーラをダウンロード

-Wireshark: Download~
http://www.wireshark.org/download.html

**インストール [#fc55fd6f]
-デフォルト設定でインストールする。
-基本的にデフォルトのインストールで問題ない。
-以下、インストール オプションの注意点のみ抜粋して説明する。

--(a) のインストール オプションは、
---Wiresharkのインターフェイスのオプションで、~
前バーションのEtherealのインターフェイスで利用したい場合は、~
「Wireshark(legacy GTK1 user interface)」を選択する。
---ココでは「Wireshark(GTK2 user interface)」前提で説明を進める。

--(b) のインストール オプションは、
---[[WinPcap>#nbe59c8a]]をインストールするかどうかのオプションである。
---Wiresharkのパケット キャプチャに必須のソフトウェアである。
---既にインストールされている場合を除いて必ずインストールする。

--(c) のインストール オプションは、
---Administrator権限を持たないユーザでもパケット キャプチャができるように、システム起動時にNICドライバをロードする設定である。
---Wiresharkはプロミスキャスモードのパケット キャプチャが可能であり、セキュリティ上好ましくないので、~
プロミスキャスモードを必要としない場合は、基本的にこのオプションは有効にすべきでないと考える。

#ref(ClassificationOfLanAnalyzer.png,left,nowrap,Wiresharkのインストール オプション)

>インストールが完了したら、Wiresharkを起動する。

*キャプチャ準備 [#e9a0c3ed]

**[Capture Interfaces]ダイアログ [#v6da81eb]
キャプチャは、メニューの[Capture] → [Interface]で表示される以下の[Capture Interfaces]ダイアログで、~
監視対象のインターフェイス(NIC)の[Start]ボタンを押して開始させる。

#ref(CaptureInterfacesDialog.png,left,nowrap,[Capture Interfaces]ダイアログ)

**[Capture Option]ダイアログ [#t9def31f]
-キャプチャ オプションを設定したい場合は、[Option]ボタンをして、[Capture Option]ダイアログを表示する。
-[Capture Option]ダイアログでは、キャプチャ オプションを確認・変更する。

#ref(CaptureOptionDialog.png,left,nowrap,[Capture Option]ダイアログ)

-初めに、[[(1)>#oa7f89b5]]を選択し、
-重要な設定として以下の[[(3)>#l79e4950]]/[[(6)>#w3d6d01d]]/[[(7)>#tfe6a0a2]]の辺りを設定・確認する。
-その他の設定は、必要に応じて設定・確認する。
-設定が完了したら、[Start]ボタンを押してトラフィックの監視を開始できる。

***設定項目 : (1) 監視対象のインターフェイス(NIC)を選択 [#oa7f89b5]
-初めに、(1)を選択し、監視対象のインターフェイス(NIC)を選択する。


***設定項目 : (2) 監視に使用するメモリ量 [#laeee2a3]
-監視に使用するメモリ量を設定する。
-ファイル保存しない場合や、ファイル保存する場合にファイルI/Oによる~
性能低下を防ぐためのバッファリング処理に必要なメモリ量を設定する。

***設定項目 : (3) プロミスキャス モード [#l79e4950]
-プロミスキャス モードのオン・オフを設定する。
-プロミスキャス モードで監視する場合、このチェック ボックスをオンにする。

***設定項目 : (4) パケットのデータ サイズ [#kb626bb4]
-キャプチャするパケットのデータ サイズを設定する。
-設定がオフの場合、全てのデータをキャプチャする。
-オンにしてサイズを設定した場合、指定サイズより後ろのデータは切り捨てられる。

***設定項目 : (5) キャプチャ フィルタ [#m4d02828]
-キャプチャするデータをフィルタする設定をする。
-Wiresharkでは、これをキャプチャ フィルタと呼ぶ。
-フィルタ設定については、後述の[[キャプチャ フィルタ設定の項>#u21fba22]]で説明する。

***設定項目 : (6) リアルタイム更新 [#w3d6d01d]
-リアルタイムにパケット リストを更新するかどうかを設定する。
-リアルタイムにトラフィックを参照したい場合は、[Update list of packets in real time]チェック ボックスをオンにする。
-また、パケット リストの自動スクロールの設定は、[Automatic scrolling in live capture]チェック ボックスで設定する。
-また、[Hide capture info dialog] チェック ボックスがオフの場合、~
[Capture Info]ダイアログが表示され、簡単な統計情報を確認できる。

***設定項目 : (7) ファイル保存 [#tfe6a0a2]
-キャプチャしたデータのファイル保存に関する設定をする。
-ファイル名、ローリング方法、保持するファイルの最大数などを設定する。

***設定項目 : (8) 名前解決 [#lcb90ac1]
-名前解決に関する設定をする。
-この設定を有効にすると監視処理の性能が悪化することがあるので、~
名前解決は、キャプチャ後に実行することを推奨する。
--[Enable MAC name resolution]は、MAC → メーカの名前に名前解決する。
--[Enable network name resolution]は、IP → マシン名・FQDN名に名前解決する。
--[Enable transport name resolution]は、ポート番号 → サービス名に名前解決する。

***設定項目 : (9) 監視の停止方法 [#qea75517]
-パケット キャプチャの停止方法を設定する。
-キャプチャしたパケット数、データ量、時間などで設定できる。
-ファイル保存をする場合、データ量による停止は無効になる。

**キャプチャ フィルタ [#u21fba22]
[Capture Option]ダイアログの[Capture Filter]テキスト ボックスにキャプチャ フィルタ用のフィルタ式を入力する。~
(このキャプチャ フィルタ用のフィルタ式は、後述の[[ディスプレイ フィルタ>#n95722ad]]用のフィルタ式とは異なるので注意する)

***フィルタの例から選択する [#l467c63e]
[Capture Option]ダイアログの[Capture Filter]ボタンを押せば、~
[Capture Filter]ダイアログ ボックスが表示され、フィルタの例からフィルタ式を選択できる。

#ref(CaptureFilterDialog.png,left,nowrap,[Capture Filter]ダイアログ ボックス)

-[Filter]リスト ボックスからフィルタの例を選択し[OK]ボタンを押すと、~
[Capture Filter]テキスト ボックスに対応するフィルタ式が設定される。
-また、[New]ボタンを押して新しいフィルタの例を作成することもできる。

***フィルタ式・演算子 [#c18e9cfb]
キャプチャ フィルタには、幾つかのフィルタ式、演算子が用意されている。

詳細は、下記のサイトを参照のこと。
-The Wireshark Wiki > CaptureFilters~
http://wiki.wireshark.org/CaptureFilters
-Wireshark USER's Guide > 4.8. Filtering while capturing~
http://www.wireshark.org/docs/wsug_html_chunked/ChCapCaptureFilterSection.html

*キャプチャ開始 [#x4e94db2]
**[Capture form (インターフェイス名)]ダイアログ [#g03117ec]
-メニューの[Capture]を選択し[Interface]をクリックする。
-すると、[Capture Interface]ダイアログにインターフェイス(NIC)一覧が表示されるので、~
トラフィックを監視するNICの[Option]ボタンを押して、[[前述の設定>#t9def31f]]をした後に、~
[Hide capture info dialog] チェック ボックスのチェックを外し、[Start]ボタンを押す。

-これにより、以下の[Capture form (インターフェイス名)]ダイアログが表示され、全体の統計情報を確認しながらトラフィックを監視できる。
-このダイアログの、 [Stop]ボタンが押されるか、停止設定値に達するまで、トラフィックの監視が継続される。

-以下の図は、NIC監視中の[Capture form (インターフェイス名)]ダイアログである。

#ref(CaptureFormInterfaceDialog.png,left,nowrap,[Capture form (インターフェイス名)])

-[Capture form (インターフェイス名)]ダイアログから、
--一般的なネットワークでは、殆どのトラフィックはTCP/IP(ファイル共有・HTTP)であり、
--次いでUDP(DHCPのブロードキャスト、DNSクエリ)などのプロトコルであることが確認できる。
--その他のプロトコルとしては、ARP(イーサネットで内のIP → MACのアドレス解決)を確認できる程度である。

***補足 [#uffa2042]
-現在のWindowsネットワークでは、NetBIOS (NBT)が使用されているので、~
この画面ではNetBIOS(NetBEUI)プロトコルのパケットは確認できない。
-稀に、プリンタ サーバなどが発するNetBIOS(NetBEUI)のパケットが確認できる程度である。
-NetBIOS (NBT)が使用されていることは、キャプチャ後、次節で説明する画面から確認できる。

>例えば、

--NetBIOSの名前解決であるNetBIOSネーム サービス(NBNB)
--ブラウジング機能などが使用するNetBIOSデータグラム サービス(NBDS)
--ファイル共有(SMB)などが使用するNetBIOSセッション サービス(NBSS)

>を確認できる。

*キャプチャ結果の確認 [#v6d690d1]

**GUIの確認 [#o1b483bc]
キャプチャを終了すると以下のような画面が表示される。ここには、主要な表示部位を示す。~
※ メニュー バーの[View]で対応する表示部位 のチェックを外すと表示を消すことができる。

#ref(MainScreen.png,left,nowrap,メイン画面)

以下、それぞれの表示部位に表示される表示項目について説明する。

***メニュー バー [#jeebbfd1]
[メニュー バー]は、Wiresharkの各機能を呼び出す際に使用する。使用方法は後述する。

***ツール バー [#tf0d7e50]
[ツール バー]には、良く使う機能がボタンとして用意されている。以下、良く使う機能のボタンをピックアップして説明する。

-~
#ref(Menu1.png,left,nowrap,メニュー1)
--ファイルの、オープン、セーブ、クローズ、リロードが可能。
--オープン・セーブの際は、対象パケットの入・出力範囲の選択も可能。

-~
#ref(Menu2.png,left,nowrap,メニュー2)
--パケット印刷ダイアログを表示し、データのプリンタ出力や
--テキストファイル出力ができる。出力範囲・出力部位の選択も可能。
#ref(PacketPrintingDialog.png,left,nowrap,パケット印刷ダイアログ)

-~
#ref(Menu3.png,left,nowrap,メニュー3)
--パケット検索ダイアログを表示し、条件に合ったパケットに移動する。
--検索条件には、フィルタ式、16進値、文字列値などが指定できる。
#ref(PacketSearchDialog.png,left,nowrap,パケット検索ダイアログ)

-~
#ref(Menu4.png,left,nowrap,メニュー4)
>直前・直後に参照したパケットに移動する。

-~
#ref(Menu5.png,left,nowrap,メニュー5)
>表示されたダイアログにパケット ナンバーを指定することで、指定したパケットに移動する。

-~
#ref(Menu6.png,left,nowrap,メニュー6)
>最初・最後のパケットに移動する。

***フィルタ ツール バー [#p84a8e94]
-[フィルタ ツール バー]は、キャプチャしたパケットをフィルタするときに使用する。
-Wiresharkでは、これを[[ディスプレイ フィルタ>#n95722ad]]と呼ぶ
-[[ディスプレイ フィルタ>#n95722ad]]は、[[ディスプレイ フィルタ>#n95722ad]]の入力テキスト ボックスに、フィルタ式を入力する。

#ref(FilterToolBar.png,left,nowrap,[フィルタ ツール バー])

-以下、[フィルタ ツール バー]のボタンについて説明する。
|#|ボタン|説明|h
|1|[Filter]ボタン|[Display Filter]ダイアログで、フィルタの例から選択できる。|
|2|[▼]ドロップダウン リスト|過去のフィルタ式を選択できる。|
|3|[Expression]ボタン|[Filter Expression]ダイアログで、フィルタ式を参照できる。|
|4|[Clear]ボタン|フィルタ式をクリアする。|
|5|[Apply]ボタン|フィルタ式を適用する。|

#ref(DisplayFilterDialog.png,left,nowrap,[Display Filter]ダイアログ)
[Display Filter]ダイアログについては、「[[フィルタの例から選択する]]」で説明する。

#ref(FilterExpressionDialog.png,left,nowrap,[Filter Expression]ダイアログ)
[Filter Expression]ダイアログについては、「[[高度なフィルタ式の作成方法]]」で説明する。

***パケット一覧部 [#a7233181]
-[パケット一覧部]には、キャプチャしたパケットの概要がレコード一覧として表示される。

-1行に付き1パケット(フレーム)が表示され、簡単な説明が表示される。

#ref(PacketListPart.png,left,nowrap,パケット一覧部)

-以下、レコードのカラムについて説明する。

|#|項目|説明|h
|1|No|キャプチャしたパケット番号(パケット番号はフィルタを適用しても変わらない。)|
|2|Time|キャプチャした時間表示&br;メニューの[Time Display Format…]から形式を変更可能。&br;・[Date and Time of Day]:日付 時刻&br;・[Time of Day]:時刻&br;・[Second Since Beginning of Day]:最初のパケットからの相対表示	→ デフォルト|
|3|Source|送信元のMACアドレス、IPアドレス、ホスト名など|
|4|Destination|送信先のMACアドレス、IPアドレス、ホスト名など|
|5|Protocol|最上位層のプロトコル(プロトコル パーサで解釈できる場合)&br;プロトコル パーサ : キャプチャしたプロトコルを解釈するために必要なDLL|
|6|Info|各プロトコルの簡易情報&br;概要の把握には役に立つが、詳細はパケット詳細部で確認する。|

-上記のレコードは、ファイル共有(SMB)機能で、
--ファイルを送信する「Write AndX Request」コマンドと、
--送信ファイルのデータ部が分割されたTCPパケットである 。
--[TCP segment of a reassembled PDU]という情報は、
---TCPでストリームに書き込んだデータのサイズが大き過ぎるため、~
IPレイヤで複数のIPパケットに分割されたことを意味する。
---この情報は、[[後述するWiresharkにより生成された追加情報>#bcc20870]]~
であり、パケットのデータ中には含まれない。

-これらの分割されたパケットは、ファイル共有(SMB)によるものであるが、
--SMBのコマンド情報が含まれないのでプロトコル パーサが反応せず、表示上は純粋なTCPのパケットとして表示される 。
--SMBの「Write AndX Request」コマンドのパケットには、データ長=61440バイトと表示されているので、~
「Write AndX Request」コマンドによる通信データは、イーサネット上でのIPパケットのデータ部の最大サイズである~
1460バイト毎に分割されて送信される(この場合、61440 ÷ 1460 = 43個のIPパケットに分割される)。

***パケット詳細部 [#bcc20870]
-[パケット詳細部]には、[[[パケット一覧部>#a7233181]]]で選択したパケットの詳細情報が表示される。
-プロトコル パーサによって解釈された情報がレイヤ毎に表示される。
-レイヤ : フレーム → イーサネット フレーム → IPパケット → 上位プロトコルの情報

#ref(PacketDetailPart1.png,left,nowrap,パケット詳細部(プロトコル パーサによって解釈されたレイヤ毎の情報))

-[パケット詳細部]の情報を選択した状態で右クリック、~
[Copy] → [Description]を選択することで、[パケット詳細部]の情報をコピーできる。~
このコピーした情報を検索(Find)機能で使用できる。

#ref(PacketDetailPart2.png,left,nowrap,パケット詳細部の情報を利用した検索(Find)も可能)

-また、[パケット詳細部]には以下の追加情報が出力される~
(これらの情報はパケットのデータ中には含まれないので注意する)。
--TCPパケットの前後の関係をWiresharkが判断して自動生成性した追加情報(Generated fields)、
--他のパケットへのリンク(Link)

-例えば、パケット詳細部の[SEQ/ACK Analysis]フィールドには、
--シーケンス番号・ACK番号からTCPの通信シーケンスを分析するための追加情報・リンクが付与される。
--以下の図に示す[This is an ACK to the segment in frame: xx]という追加情報・リンクは、~
このパケットがリンク先のパケットに対するACKであることを示す。

#ref(PacketDetailPart_AdditionalInformationAndLinks1.png,left,nowrap,パケット詳細部 - 追加情報とリンク(1))



-[[[パケット一覧部>#a7233181]]]の簡易情報に表示されていた[TCP segment of a reassembled PDU]という情報も、この追加情報である。
-[パケット詳細部]を確認すると、下記情報が表示されていることを確認できる。
--[Reassembled PDU in frame: xxxx]という追加情報
--IPレイヤで分割されたパケットを束ねるリンク

#ref(PacketDetailPart_AdditionalInformationAndLinks2.png,left,nowrap,パケット詳細部 - 追加情報とリンク(2))

-Wiresharkは、
--ノードが同一TCPコネクション上で初めのパケットの送信(・受信)を開始してから、
--TCP のPushフラグ 付きのパケットを送信(・受信)するまでの、
---Pushフラグ(TCPフラグ)は、TCPの受信バッファのデータをアプリケーションに送るように、送信側が受信側に対して指示するためのフラグである。
---その他のTCPフラグについては、「[[TCPセグメント詳細情報(TCPフラグ)から異常を確認する]]」で説明する。

--一連のパケット に、[TCP segment of a reassembled PDU]追加情報・リンクを付与しているものと思われる。
---これは、TCPストリームへの1回の書き込み(読み込み)に相当する。
---TCPストリームについては「[[TCPストリームで上位プロトコルを確認する]]」を参照のこと。

-以下は、Pushフラグ付きのSMBの「Write AndX Request」コマンドのパケットである。~
「Write AndX Request」コマンドのパケットを確認すると、分割されたIPパケットへのリンクを確認できる。

#ref(PacketDetailPart_AdditionalInformationAndLinks3.png,left,nowrap,パケット詳細部 - 追加情報とリンク(3))

-また、トランスポート層のプロトコル(TCP、UDP)より上位のプロトコルである~
DNS 、HTTPなどのプロトコルでも、それぞれのプロトコル パーサによって追加情報・リンクが付与される。
--例えば、DNSクエリ(パケット)を参照すると、このDNSクエリに対するレスポンス(パケット)へのリンクを確認できる。


#ref(PacketDetailPart_AdditionalInformationAndLinksDNS.png,left,nowrap,パケット詳細部 - 追加情報とリンク(DNS))

--また、以前のバージョンでは、パケット データ部から読み取るしかなかったHTTPのエンティティ ボディの情報が、~
Version0.99.7のプロトコル パーサからパケット詳細部の[Line - Based text data]フィールドに~
テキストとして出力されるようになった(ただしASCII以外の文字は正しく表示されない)。

#ref(PacketDetailPart_AdditionalInformationAndLinksHTTP.png,left,nowrap,パケット詳細部 - 追加情報(HTTP))

***パケット データ部 [#r7189225]
-[パケット データ部]では、[[[パケット一覧部>#a7233181]]]で選択したパケットの情報が表示される。

-以下は、HTTPリクエスト(GETメソッド)のパケットで左からアドレス、16進ダンプ、ASCIIが表示される。
-ただし、ASCII 以外の文字コード(Shift JIS、UTF-8)のエンコーディングに対応していないので使い難い。

#ref(PacketDataPart.png,left,nowrap,パケット データ部)

***ステータス バー [#i92ea5a5]
画面の最下部の[ステータス バー]には、

#ref(StatusBar.png,left,nowrap,ステータス バー)

-現在のプログラムの状態、
-パケット
--取得したパケット(Packets)
---現在、開いているファイル中のPacketの数
--表示中のパケット(Displayed)
---フィルタなどをかけた場合、表示されているPacketの数
--マークされたパケット(Marked)
---マーク したPacketの数
---[[[パケット一覧部>#a7233181]]]でパケットを選択した状態で、メニューの[Edit]にある[Mark Packet]を選択することでパケットのマークが可能。
---その他にも、[Mark All Packet]、[UnMark All Packet]、[Find Next Mark]、[Find Previous Mark]などの操作が可能。

などの情報が表示される。

**ディスプレイ フィルタ [#n95722ad]

*HTTPのキャプチャ [#jacc0de2]
-Wiresharkは、OSI参照モデルで言う所の第4・5層のキャプチャをする。
-従って、キャプチャした情報は、フレームやパケット単位で見ることになる。

-HTTPのリクエスト・レスポンス(OSI参照モデルで言う所の第6層以上)~
のコンテンツについては、[Follow TCP Stream]で確認することができる。
--Wiresharkで特定の通信セッションだけを抽出して表示する - @IT~
http://www.atmarkit.co.jp/fwin2k/win2ktips/1048wsharkstream/wsharkstream.html
--[Follow TCP Stream]の結果、リクエスト・レスポンスの見た目が、~
HTTP 100-continue などによりキレイに繋がらないことがあります。
---HTTP 100-continue - ..たれろぐ..~
http://d.hatena.ne.jp/naga_sawa/20101114/1289709797
---また、全角文字が「・」で表示され確認できません。

*参考 [#i3ac90b5]

**Wiresharkの使い方 [#l78c7369]
下記を参照下さい。

-ネットワーク入門サイト - Wiresharkの使い方~
http://beginners-network.com/wireshark.html
-Wiresharkで特定のプロトコルだけを表示させる - @IT~
http://www.atmarkit.co.jp/fwin2k/win2ktips/1050wsfiltproto/wsfiltproto.html
-Wiresharkで特定の相手との通信だけを表示させる - @IT~
http://www.atmarkit.co.jp/fwin2k/win2ktips/1065wsfiltaddr/wsfiltaddr.html
-Wiresharkで特定の通信セッションだけを抽出して表示する - @IT~
http://www.atmarkit.co.jp/fwin2k/win2ktips/1048wsharkstream/wsharkstream.html

**WinPcap [#nbe59c8a]
-WinPcapは、パケット キャプチャに関する機能を提供するソフトウェア
-以下のモジュールから構成される。
--システム非依存型の「wpcap.dll」
--ローレベル ライブラリ「Packet.dll」
--カーネル モードのNDIS中間ドライバ「npf.sys」
-Wiresharkでは、WinPcapを使用してパケット キャプチャを行っている。

**tshark [#xc70a425]
tsharkというCUI版も存在する様です。

----
Tags: [[:通信技術]], [[:障害対応]], [[:性能]], [[:デバッグ]], [[:Windows]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS