読者です 読者をやめる 読者になる 読者になる

ユーキズム

~社会人バンドマンの自由気ままな奔放記~

もう初心者とは言わせない!素人でも必ずできるパケットキャプチャの方法~Wiresharkの使い方~

IT

インフラ・ネットワーク関連のエンジニアなら100%使うであろう無敵のパケット採取・解析ツール「Wireshark(ワイヤーシャーク)」
しかしインフラ・ネットワーク関連初心者には非常に高度で使いづらいイメージがあります。ぼくも最初はネットワークには疎かったので苦手意識が強かったんですが、最近やっと使い慣れました。

ということで、「なんかパケットキャプチャしろとか言われた!」「Wiresharkって何?!」って人の為に、使い方についてまとめてみました。

Wiresherkとは

f:id:karezi:20160304222053j:plain
WiresharkはPC、サーバ、ネットワーク機器などに流れるパケットをキャプチャするソフトウェアです。
無料で使えるのに解析に便利な様々な機能が付いていて、これを使わないインフラ・ネットワークエンジニアはいないんじゃないかってくらい重要なソフトです。

Wiresherkのダウンロードとインストール方法

よくわからなくても、何も考えずデフォルトのまま「Next」とか「Install」をクリックしてたら大丈夫です!

ダウンロード

ダウンロードは公式サイトや窓の社で出来ます。
公式HP https://www.wireshark.org/
左側のDwonlode→自分のPCにマッチしたインストーラをクリックしてDLです。
本ブログではWindows 64bitを元に解説します。

インストール

f:id:karezi:20160304224023j:plain
ダウンロードしたファイルをダブルクリックして実行します。最初の画面は「Next」をクリック。


f:id:karezi:20160304224032j:plain
ライセンス同意画面が出るので、「I Agreee」をクリック。


f:id:karezi:20160304224044j:plain
どのソフトウェアを入れるかの画面が出ます。みんな使えるのでデフォルトのままNextをクリック。


f:id:karezi:20160304224054j:plain
ショートカットの置き場などを選択する画面が出ます。
こだわりが無ければそのままデフォルトのまま「Next」をクリックで良いです。中身は以下の通りです。
「Wireshark Start Menu Item」 左下のWindowsマーククリックした時に表示する。
「Wireshark Desktop Icon」 デスクトップに表示する。
「Wireshark Quick Launch Icon」 タスクバーに常に表示する。
※Legacyと付いてる項目は旧バージョンのWireshark画面で起動するためのアイコンを追加するかどうかです。

「Associate trace file extensions to Wireshark」表示されてる拡張子のファイルをWiresharkで起動する。基本はチェックしたまま。


f:id:karezi:20160304224103j:plain
インストール先を決めます。意図的に変更したい場合以外はデフォルトのまま「Next」をクリック。


f:id:karezi:20160304224111j:plain
WinPcapというソフトのインストール確認画面が出ます。必須のためチェックしたまま「Next」をクリック。


f:id:karezi:20160304224118j:plain
USBPcapというソフトのインストール確認画面が出ます。USBデータをキャプチャした場合はチェックします。
チェックせず「Install」をクリックすると、ファイルをコピーする画面→以下の画面が出ます。


f:id:karezi:20160304224140j:plain
WinPcapのインストール画面です。「Next」をクリック。


f:id:karezi:20160304224147j:plain
ライセンス同意画面が出るので、「I Agreee」をクリック。


f:id:karezi:20160304224200j:plain
何も考えず「Install」をクリック。
ファイルをコピーする画面→以下の画面が出ます。


f:id:karezi:20160304224210j:plain
インストール終了画面。「Next」をクリック。


f:id:karezi:20160304224628j:plain
「Finish」をクリック。これでインストールは完了!お疲れ様でした。

Wiresharkの基本的な使い方

インストールが無事終わったところで、早速使ってみましょう。

キャプチャ実行

f:id:karezi:20160304224737j:plain
デスクトップやスタートメニューに出来たWiresharkのアイコンをクリックして起動するとこの画面が表示されます。
画面中央にインターフェースが出てくるので、採取したいインターフェースをダブルクリックすることでキャプチャを実行できます。
※インターフェース名の横の波線は今の通信量が出てます。複数インターフェースがあってどれが通信してるか分からないときは参考にしてください。

キャプチャ画面の見方

f:id:karezi:20160304224750j:plain
キャプチャを開始すると、この画面に変わります。


赤枠部分は実際に通信が起きてるパケットがずらーーっと並びます。一番確認する項目ですね。

青枠部分は上部で選択したパケットの詳細が表示されます。

緑枠部分は同じく選択したパケットを16進数で表示します。解析する時もここを見ることはあまりないかな…。

キャプチャ停止

f:id:karezi:20160304224928j:plain
キャプチャの停止はメニューバーの「キャプチャ」→「ストップ」をクリック、または左上の赤い四角をクリックすると停止できます。

キャプチャ結果保存

f:id:karezi:20160304224938j:plain
キャプチャデータの保存は「ファイル」→「...として保存」を選択することで出来ます。

キャプチャ結果出力

f:id:karezi:20160304225023j:plain
キャプチャした結果を別ファイルに出力できます。ぼくはCSV出力→Excelにまとめることが多いです。
「ファイル」→「エキスパートパケット解析」→「CSVとして」→保存先とファイル名.csvとして「保存」をクリック。

Wiresherkキャプチャフィルタの方法

先ほど説明した方法でキャプチャを実行すると、選択したインターフェースを通る全てのパケットを採取します。
しかし実際には特定のパケットを解析したい場合が多いです。特定にパケットに絞るために、キャプチャ実行前後でフィルタを設定します。
以下はその手順です。

表示フィルタ

表示フィルタとは、キャプチャ実行後、表示されるキャプチャを特定のパケットに絞る機能です。
画面上部に「表示フィルタを適用します・・・」と表示されている枠にフィルタの構文を入力します。
f:id:karezi:20160304225206j:plain

表示フィルタ構文 内容
ip.addr == 10.0.0.1 送信元、または宛先IPが10.0.0.1のパケットを表示
tcp TCPプロトコルのみ表示
tcp.port == 100 送信元、または宛先ポートが100のパケットを表示{
tcp.analysis.retransmission TCPの再送パケットを表示。トラブルシュートに便利
ip.src == 10.0.0.1 && ip.dst == 10.0.0.2 送信元が10.0.0.1、且つ宛先が10.0.0.2のパケットを表示

構文の間に以下を追記することで、条件を複数に出来ます。
・「&&」または「and」 = 「~~かつ~~」
・「||」または「or」  = 「~~または~~」

キャプチャフィルタ

キャプチャフィルタは、特定のパケットしか採取したい場合に利用するフィルタです。
パケット自体の量が抑えられるため、データのサイズ量も減り、検索・解析がしやすくなります。
ある程度見たいパケットの条件(時間、IP等)が決まっている場合にお勧めです。

f:id:karezi:20160304225753j:plain
f:id:karezi:20160304225808j:plain
f:id:karezi:20160304225821j:plain
キャプチャフィルタは初期画面か、「キャプチャ」→「オプション」→「入力」画面の「キャプチャフィルタを入力…」に構文を入力します。
キャプチャフィルタの構文は表示フィルタと異なります。(&&や||は表示フィルタと同様に使えます)

キャプチャフィルタ構文 内容
host 10.0.0.1 送信元、または宛先IPが10.0.0.1のパケットを採取
ip src 10.0.0.1 送信元IPが10.0.0.1のパケットを採取
tcp TCPプロトコルのパケットを採取
tcp port 80 送信元、または宛先ポートがTCP80のパケットを採取

Wiresharkキャプチャの分割保存・結合の方法

分割保存

トラブルシュートでキャプチャを実行するけど、いつトラブルが発生するかわからない。そんな時はトラブル発生を待ったり、作業をしたりする間キャプチャを実行しっぱなしにする、なんてことがよくあります。
そうすると、キャプチャしたデータ量が多くなりファイルを開くのに時間がかかったり、PCによってはクラッシュしたりします。
それを防ぐために、Wiresharkでは規定の容量や時間に達したとき、自動的にファイルを分割して保存する機能があります。


f:id:karezi:20160304225808j:plain
f:id:karezi:20160304230342j:plain
分割ルールを設定するには、まず「キャプチャ」→「オプション」→「出力」を選びます。

出力形式はpcapを選択します。
※pcap-ngはまだ浸透していない様子…。詳しく書いてる記事がありましたので参考までにどうぞ!
http://www.slideshare.net/yagishinnosuke/pcapng

「永続的なファイルへキャプチャ」にチェックを入れ、ファイル欄に保存先のパスとファイル名を入力します。
この際、ファイル名に必ず「.pcap」をつけてください。つけないと拡張子無しで保存されます。
※付け忘れた時の対処法も後述してますが、面倒なので!

「...後に自動的に新ファイルを作成」にチェックを入れ、どのタイミングでファイルを分割するか設定します。
図ではファイルサイズが1MBに達した場合、別のファイルを作成する設定です。

「指定したファイル数で最新ファイルを保存」にチェックを入れファイル数を選択すると、
指定したファイル数を超えるデータは古いファイルに上書きしてくれます。
なので例えば、規定ファイルサイズ10MB、ファイル数を10にすると、最大で10MB×10ファイルの保存となります。


結合

f:id:karezi:20160304230718j:plain
分割したけど一つのファイルとして表示させたい!
そんな時はpcapファイルを結合して1つのファイルにすることができます。

実はここまでの内容は他のサイトにも結構乗ってたりするんですが、結合に関しては情報が少なかった!
初心者向けの解説は無かったので是非参考にしてみてください。

なお、この機能は解説してきたWiresharkではなく、別のソフトを実行します。(Wiresharkインストール時にインストールされてますのでご心配なく)

f:id:karezi:20160304230738j:plain
まず、コマンドプロンプトを起動します。図では「左下Windowsマーク」→左下の枠に「cmd」と入力し実行します。

f:id:karezi:20160304230750j:plain
①「cd C:\work」に移動します。これはキャプチャデータが保存されているフォルダにパスになりますので、環境によって読み替えてください。
※保存されているパスが別ドライブの場合、コマンドが「cd/d」になります。例としては「cd/d D:\work」です。
②「"C:\Program Files\Wireshark\mergecap.exe" *.pcap -w test_PC01.pcap」と入力します。
「"C:\Program Files\Wireshark\mergecap.exe"」が先ほど説明した結合用の別のソフトです。
「*.pcap」は移動したパス配下のpcapファイル全てを指定しています。例えばこれが2つのファイルのみにしたい場合は「01.pcap 02.pcap」とスペースで分けてください。
結合元のファイルが全て記載できたら、「-w 保存ファイル名」を入力してください。「-w」が保存という意味のオプションになります。

f:id:karezi:20160304230810j:plain
というわけで、図の通り1つのファイルになりました!


おまけ

というわけで、以上が基本的な使い方になります。
これでとりあえずキャプチャは出来るかと思うので、まずはやってみてください!
解析については通信の基礎を理解するとこからなので割愛します(笑)

f:id:karezi:20160304230914j:plain
最後に、キャプチャを分割保存する際に拡張子を付け忘れた!ってなった時の対処法を書いときます。

f:id:karezi:20160304230932j:plain
結合時と同様にコマンドプロンプトを起動→保存先のパスに移動したあと、「ren * *.pcap」と入力します。
最初の「*」は全てのファイルを指していて、そのファイルに「.pcap」を追加するというコマンドです。

f:id:karezi:20160304231022j:plain
手動で入力なんてやってらんないもんね!



最後に

いかがでしたでしょうか。
使えるに越したこと無いツールですので、是非使いこなしてみてください。
これで上司の無茶振り少しでも耐えられたらーと思います!




今日はここまでっ