Wireshark便利機能メモ

本を読んでWiresharkを使う上で便利だった機能のメモ。

# 参考

+ [パケットキャプチャ入門 第3版 (LANアナライザWireshark活用術)](http://www.amazon.co.jp/%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E5%85%A5%E9%96%80-%E7%AC%AC3%E7%89%88-LAN%E3%82%A2%E3%83%8A%E3%83%A9%E3%82%A4%E3%82%B6Wireshark%E6%B4%BB%E7%94%A8%E8%A1%93-%E7%AB%B9%E4%B8%8B-%E6%81%B5/dp/4897979501/ref=sr_1_2?ie=UTF8&qid=1459990219&sr=8-2&keywords=%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3)

# 環境

+ Mac OS X 10.11.4
+ Wireshark 2.0.2

# パケットの内容をテキストやCSVに出力

tcpdumpコマンドなどで取得したpcapファイルはバイナリなのでテキストにしたい場合には便利。

+ File->Export Packet Dissections->As Pain Text
+ File->Export Packet Dissections->As CSV

なお、特定のパケットだけ出力する場合、画面下の部分の設定を変更することでマークした特定のパケットや表示されているパケットのみの出力もできるようです。

![Screen Shot 2016-04-07 at 10.35.11 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/1de6d924-8135-18a9-1ae9-61cc0c3e274e.png "Screen Shot 2016-04-07 at 10.35.11 AM.png")

# パケットのフィルタリング

画面上部の空欄にプロトコル名や条件を入力すると表示するパケットの絞込みが出来ます

![Screen Shot 2016-04-07 at 10.04.52 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/c880aba4-1a82-550c-39cd-9b81c1f01c44.png "Screen Shot 2016-04-07 at 10.04.52 AM.png")

例えば以下などができます。

+ http->HTTPプロトコルのみ表示
+ tcp.port==80->TCPかつポート番号80という値を含むパケットのみ表示
+ ! ssh->SSHプロトコル以外表示

なお、Capture->Capture Filtersで登録などができるのでよく使うものは登録しておくと便利そう。

![Screen Shot 2016-04-07 at 10.09.29 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/8d32f935-82f6-56ee-56da-c55bc9d001ed.png "Screen Shot 2016-04-07 at 10.09.29 AM.png")


# Time列の表示を実際に通信が発生した時間に変更する

表示している画面のTime列はキャプチャを開始した時間からの経過秒数となっております。
上記を実際の取得した時間へ表示を変換できます。

+ View->Time Display Format->Date and Time of Day

![Screen Shot 2016-04-07 at 10.11.26 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/2760e5eb-0108-ca12-3490-e5c496e16d7b.png "Screen Shot 2016-04-07 at 10.11.26 AM.png")

# 特定のTCPセッション情報のみ取得する(TCPストリーム）

様々なサーバーとの通信が行われる場合、どのパケットがどのパケットと関連しているか分かりにくい事があると思います。上記に対し選択したパケットに関連するパケット群のみを抽出する事ができます。

例えばHTTPのリクエストが2回あった場合に、どこまでが1回目のリクエストに関連するTCPの通信でどこまでが2回目のリクエストに関するものか区別する場合に便利です。

+ 対象のパケットを選択->Analyze->Follow TCP Stream

上記によってパケットフィルタ欄に「tcp.stream eq 1」という文言でフィルタしている事が分かり、キャプチャを開始してから二つ目のTCPのストリーム(0から始まる)のみを表示している事が分かります。

また、HTTP通信の場合、リクエストとレスポンスの詳細を別ウィンドウで表示してくれるのも便利で良いですね。

![Screen Shot 2016-04-07 at 10.22.41 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/a640f78e-e875-ce91-26d9-cccd2bbf9cd1.png "Screen Shot 2016-04-07 at 10.22.41 AM.png")

# パケットの流れを表示する(Flow Graph機能)

パケットの流れを視覚的に表示したい利用すると便利な機能です。
先ほどのTCPストリームで表示するパケットを絞り込んで、その後、Flow Fraph機能を使って視覚的にどのような通信が行われていたか確認できると便利かと思います。

+ Statics->Flow Graph
+ 画面左下のShowのセレクトボックスで「Displayed packets」を選択

![Screen Shot 2016-04-07 at 10.27.12 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/3032f666-95bb-c8af-64c6-8bbbe94fb427.png "Screen Shot 2016-04-07 at 10.27.12 AM.png")

上記のようにキャプチャしたパケットから一部の通信にフォーカスして通信の流れ（今回の例ではTCP接続の3ウェイハンドシェイク、HTTPプロトコルによる通信、TCPの切断まで）が視覚的に確認できて便利です。

また、「Save As」によって上記を保存することもできます。

# 取得したパケット群の概要を把握する

取得したパケット群に対しての全体の概要を取得することができます。

+ Statics->Capture File Properties

![Screen Shot 2016-04-07 at 10.47.08 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/35230faa-f730-df88-2854-c0e18f5c7d3b.png "Screen Shot 2016-04-07 at 10.47.08 AM.png")

特に有用なのが、上記のStaistics欄に表示される情報です。
「Average pps」は1秒ごとの平均のパケット数で、「Average packet size」は平均パケットサイズとなります。

例えばあるタイミングで通信が遅かったという場合に、Average ppsの量が高ければそのタイミングで大量のパケット交換があったことが影響して遅延が発生したことが考えられます。

また、全体の把握とは別にどのクライアントサーバー間で何の通信が多かったかなどを把握したい場合も多いと思います。上記については以下の操作で確認ができます。

+ Statics->Endpoints

![Screen Shot 2016-04-07 at 11.02.17 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/888c8018-9690-9dc8-cd27-49a28044e033.png "Screen Shot 2016-04-07 at 11.02.17 AM.png")

EthernetやIPv4、TCPなどのタブを切り替える事でそのプロトコル毎にどの対象(EthernetであればMACアドレス、IPv4であればIPアドレス、TCPであればポート)毎にどれぐらいパケット数の交換やパケットサイズの交換があったか確認できます。
これによってある特定のクライアントサーバー間のみ通信が多いなどの問題点を発見することができます。

列名を選択することで対象列でソートをすることもできるので、対象のプロトコルでどの通信がパケットを多く交換しているのかなども確認ができます。

また、プロトコル毎の全体の利用状況も確認できます。

+ Statics->Protocol Herarchy

![Screen Shot 2016-04-07 at 11.08.50 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/7ab1dd73-58d8-fa5c-7419-34384fb98451.png "Screen Shot 2016-04-07 at 11.08.50 AM.png")

上記例では全ての通信はTCPプロトコルで、その中でアプリケーション層としてはHTTPとSSHを利用しています。HTTPとSSHの通信パーセンテージを足しても100%になりますせんが、その分はTCPの3ウェイハンドシェイク及びTCP切断などのTCPプロトコルを利用する際に必要なトラフィックですね。

# トラフィック量が多い時間帯を確認する

Y軸をトラフィク量、X軸を時間としてグラフを表示することができます。

+ Statics->I/O Graph

![Screen Shot 2016-04-07 at 11.29.18 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20193/c9e01bb9-1073-dbcd-e9cf-42b7b134ecd8.png "Screen Shot 2016-04-07 at 11.29.18 AM.png")

上記では10-12secの間にトラフィック量が上がってますが、該当時間にHTTPリクエストを行ったことが起因しています。

上記機能を使うことでキャプチャした間のいつのタイミングでトラフィック量が多いか確認できます。

その後、様々な機能を使うことで具体的にどこに何の通信が多かったのかなどの解析も可能です。