パケットキャプチャの仕組み(プロミスキャスモード)

Wiresharkの使い方を見ていく前に、どうやってパケットをキャプチャするのかについて少し考えていきます。

パケットキャプチャドライバ

パケットキャプチャはWireshark単体では行えません。Windowsの場合、Wiresharkと一緒にインストールすることになるWinPcapが必要です。(UNIX/Linuxの場合はlibpcap)

WinPcapはいわゆる「パケットキャプチャドライバ」と呼ばれるものです。

パケットキャプチャドライバは、通常の方法では取得できないパケットを取得するための特殊なデバイスドライバです。

どういうことかと言うと、通常のアプリケーションはソケットを経由してデータを送受信します。ソケットとはOSのAPI(OSが提供する機能)で、アプリケーションがデータを送受信するための仕組みを提供してくれます。

このソケットを経由した場合、取得できるのは自身のアプリケーション向けのパケットのみであり、ネットワークを流れるパケットを取得することができません。

しかし、パケットキャプチャドライバを導入することで、ネットワークを流れるすべてのパケットを取得することが可能になります。

プロミスキャスモード

パケットキャプチャドライバは、プロミスキャスモードを呼ばれる特殊なモードに切り替えることで動作します。

プロミスキャスモードはNIC(ネットワークカード)が持つ動作モードのひとつで、この動作モードに切り替えることで、自分宛のデータパケットでない信号も取り込んで処理をすることができるようになります。

標準のモードでは、NICは自分宛のパケットを受信したときのみ、上位のレイヤーにそのデータを受け渡します。例えば、イーサネットの場合、自身のMACアドレス宛に届いたパケットのみ上位のレイヤーに受け渡し、自分以外のMACアドレス宛であれば、破棄します。(ブロードキャストパケット等の例外は除く)

しかし、NICをプロミスキャスモードに切り替えれば、パケットの宛先に関わらず全てのパケットを上位レイヤーに受け渡します。

これにより、NICに届いたパケットすべてをキャプチャできるようになります。

ちなみに、プロミスキャスモードは使い方によっては、悪意的な盗聴の手段となります。そのため、プロミスキャスモードへの切り替え方法は通常、公開されていません。