CodeZine(コードジン)

特集ページ一覧

WinPcapを使用したパケットモニターの作成

WinPcapの利用方法、および取得したパケットの解析方法

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2005/07/28 12:00

本稿では、WinPcapを使用したパケットモニターを作成し、パケットドライバー「WinPcap」の利用方法、および取得したデータをプロトコルに従って解析する手法について紹介します。

目次
サンプルプログラムの実行例
サンプルプログラムの実行例

はじめに

 本稿では、WinPcapを使用したパケットモニターを作成し、パケットドライバー「WinPcap」の利用方法、および取得したデータをプロトコルに従って解析する手法について紹介します。

対象読者

  • WindowsでC++を使用してネットワーク関連のプログラムを作成される方。
  • パケットモニターの作成に興味をお持ちの方。
  • WinPcapドライバーの利用に興味をお持ちの方。

必要な環境

  • サンプルプログラムは、WinPcapがインストールされているコンピュータで動作します。
  • サンプルコードは、C++ Builder 6およびVisual C++ .NET 2003でコンパイルできます。

WinPcapについて

 WinPcap.exeは、http://www.winpcap.org/において、 BSDライセンスにもとづき配布されているWindows用のパケットドライバーであり、ホームページから自由にダウンロードすることが出来ます。 2005/07/10現在、安定バージョンとして3.0が、ベータバージョンとして3.1 beta 4 が配布されています。逐次バージョンアップが行われていますので、定期的に最新バージョンを確認することをお勧めします。同ページには、ウインドウなどを表示せずにバックグラウンドでインストールできるものや、WindowsCE用のものも配布されています。

 WinPcapを使用するには、お使いのコンピュータにパケットドライバー本体をインストールすることが必要ですが、WinPcap対応のソフトウエアを開発するには、これに加えて、「Developer's pack」が必要になります。「Developer's pack」には、必要なヘッダファイルやLIBファイルと共に、ドキュメントやサンプルコードも含まれています。また、同ページでは、WinPcap本体のソースコードも配布されています。デバイスドライバを開発する環境が整っている場合は、こちらからドライバ本体をコンパイルすることも可能です。興味ある方はぜひお試しください。

 なお、本稿は、バージョン3.0を対象に作成しましたが、3.1 bata 4でも問題なく動作することを確認しています。

WinPcapを使用するアプローチ

 WinPcapは、次の図に示すとおり3つの階層構造で構成されています(参考:WinPcap internals)。

WinPcapの階層構造
WinPcapの階層構造

 WinPcapでは、デバイスドライバーとしてインストールされる「npf.sys」の機能をアプリケーションが利用できるように、「Packet.dll」が提供されます。それをラッパーするように、各システムで共通の関数を提供するための「Wpcap.dll」が存在しています。このため、アプリケーションがWinPcapを利用する形態としては、「Packet.dllを利用する方法」と「Wpcap.dllを利用する方法」の2つのアプローチが存在することになります。WinPcapのソースコードのアーカイブに含まれるサンプルには、前者のアプローチを使用した例として「TestApp」が含まれており、また、後者のアプローチの例として「pktdump_ex」があります。

 どちらのアプローチでもWinPcapの利用は可能ですが、ドキュメント内の注意書きには、「Packet.dll」でしか公開されない低レベルの制御が特に必要でない限り、システムに依存せずUNIXのパケットキャプチャライブラリ(libpcap)と互換性のある「Wpcap.dll」を使用するように推奨されています。本稿では、後者のアプローチをとり「pktdump_ex」を元にしてサンプルプログラムを作成しました。

インクルードファイルとインポートライブラリの使用

 WinPcapを利用してプログラムを作成するには、WinPcapの「Developer's pack」で提供されるインクルードファイルと「wpcap.lib」へのリンクが必要になります。サンプルソースにWinPcapのヘッダファイルは含まれておりませんので、「Developer's pack」を展開し適切なパスを設定してください。

 C++ Builder 6、またはVisual C++ .NET 2003を使用している場合の、「ライブラリファイルの追加」と「インクルードパスの設定」は以下のとおりです。

C++ Builder 6の場合

  • 「プロジェクト」→「オプション」→「ディレクトリ/条件」→「インクルードパス」に、「;(セミコロン)」で区切ってWinPcapの「include」ディレクトリへのパスを追加する。
  • 「プロジェクト」→「プロジェクトに追加」→追加するLIBファイルを選択する。

Visual C++ .NET 2003の場合

  • 「プロジェクト」→「プロジェクトのプロパティ」→「C/C++」→「全般」→「追加のインクルードディレクトリ」に、追加するインクルードパスを指定する。
  • 「プロジェクト」→「プロジェクトのプロパティ」→「リンカ」→「入力」→「追加の依存ファイル」に、追加するLIBファイルを指定する。
 ※「Developer's pack」に含まれる「wpcap.lib」は、Visual C++で使われているCOFF形式のインポートライブラリですので、C++ Builderで使用する場合は、OMF形式に変換する必要があります。この変換には、C++ Builderに含まれる変換用ユーティリティ(COFF2OMF.EXE)を使用できます。
OMF形式への変換
c:\tmp>coff2omf.exe wpcap.lib wpcap-builder.lib
COFF to OMF Converter Version 1.0.0.74
 Copyright (c) 1999, 2000 Inprise Corporation

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 平内 真一(ヒラウチ シンイチ)

     クラスメソッド株式会社 モバイルアプリサービス部所属  仕事では、iOSアプリの開発を行っております。 会社ブログ 個人ブログ

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5