一般的に、パケットキャプチャとは、WireSharkやtcpdumpなどソフトウェアツールを使ってネットワーク上を流れるパケットを収集することを言います。
ネットワークを流れるパケットをキャプチャすることで、クライアントやサーバなど各種装置の挙動を推測することができます。たとえば、使っているプロトコルの種類、接続方法、接続先やポート番号、送受信のデータサイズ、どちらが切断したかなどです。
ネットワークは、スイッチ、ルータなどネットワーク機器が接続されて構成されています。パケットのロストや遅延、コネクションの切断などの異常が発生した場合、ネットワークの途中で、パケットキャプチャを取得することで、どこのネットワーク機器で問題が発生しているのかを特定します。
故障であれば、ネットワーク機器を交換したり、帯域不足であれば、高性能のネットワーク機器に交換するか、帯域に余裕があるネットワーク機器へと接続を変更するような対策を取ります。
■ パケットキャプチャの原理
パケットキャプチャは、イーサネットアダプタのMACに備わる「プロミスキャスト」機能を使って実現されています。
プロミスキャストとはLANのインタフェースを使って、つながっているネットワーク上に流れるすべてのパケットを受信する機能です。自分自身が送受信するパケットだけではなく、ネットワークにつながった他の機器が送受信するパケットも受信することができます。
これによって、WireSharkやtcpdumpなどソフトウェアツールは、つながったネットワーク上を流れるパケットをすべて取得することができます。
■ 取得方法
まず、WireSharkをPCにインストールします。
> sudo apt install wireshark
(*)Windows版は以下からインストーラをダウンロードします。
https://www.wireshark.org/download.html
パケットキャプチャを取得するには、以下のように接続します。
WireSharkをインストールしたPCを、リピータHUB(いわゆるバカHUB)を使って接続するか、スイッチングHUBのミラポートに接続します。
スイッチングHUBは、通常のポートに接続すると、接続されたポート以外のパケットは流れないので、パケットキャプチャをしても、自分自身のパケットしか取得できません。
その代わり、ミラーポートに接続すればすべてのポートに流れるパケットを取得できます。ミラーポートは、物理的に別のポートとして用意されている場合もありますが、コマンドを使って通常のポートをミラーポートに設定することができます。
PC上でWireSharkを起動します。(Ubuntu)
> sudo wireshark
LANのインタフェースを選択し、開始(左上隅のヒレのかたちのボタン)をクリックします。
そうすると、取得されたパケットが表示されます。
・時刻の表示形式を変更する場合、表示→時刻表示形式から選択します。
・中断するには、停止ボタン(左上隅の赤いボタン)をクリックします。
中断後、取得したパケットキャプチャは、ファイル→保存からファイル(PCAP形式)として保存できます。
■ フィルタリング
パケットキャプチャは、すべての種類のパケットを取得しますが、その中から特定のパケットの種類だけに絞り込みたいときがあります。たとえば、HTTPだけ、TCPだけ、IPだけ、Enernetだけなどです。それらに加えてよく使うのは、アドレス、ポートでのフィルタリングです。
その場合、WireSharkのフィルタリング機能を使います。
フィルタリングの指定は、WireShark独自の文法があります。
以下に、主なフィルタリング設定の例を示します。
パケット | フィルタリング設定 | 備考 |
HTTP | http | |
TCP | tcp | |
tcp and tcp.port == 80 | ポート指定 | |
tcp and tcp.srcport == 80 | ポート指定(送信元) | |
tcp and tcp.dstport == 80 | ポート指定(宛先) | |
IP | ip | |
ip and ip.addr == 192.168.179.28 | IPアドレス指定 | |
ip and ip.src == 192.168.179.28 | IPアドレス指定(送信元) | |
ip and ip.dst == 192.168.179.28 | IPアドレス指定(宛先) | |
ICMP | icmp | |
ETHERNET | eth | |
eth and eth.addr == e0:d4:64:21:03:6d | イーサネットアドレス指定 | |
eth and eth.src == e0:d4:64:21:03:6d | イーサネットアドレス指定(送信元) | |
eth and eth.dst == e0:d4:64:21:03:6d | イーサネットアドレス指定(宛先) |
■ ログの見方
WireSharkのキャプチャ画面の見方を説明します。
まず、各パケットの詳細は、パケット一覧の画面からパケットを選択し、ダブルクリックすることで表示することができます。
プロトコル毎のパケット詳細の見方を以下に示します。
Ethernet
IP
TCP
HTTP
■ まとめ
パケットキャプチャの取得することで、表面的には見えなかったアプリケーションやサーバの挙動を知ることができます。
また、ネットワーク障害を解析する歳に、まず最初にすべきことはパケットキャプチャを取得し、現状を分析することが必要となります。
パケットキャプチャを見ることは、いまやソフトウェアがネットワーク接続が前提であることを考えると常識と言えます。
ソフトウェア開発・システム開発業務/セキュリティ関連業務/ネットワーク関連業務/最新技術に関する業務など、「学習力×発想力×達成力×熱意」で技術開発の実現をサポート。お気軽にお問合せ下さい