WinPcapの利用方法、および取得したパケットの解析方法
古谷誠進 [著] 2005/07/28 12:00

1 2 →
サンプルプログラムの実行例
サンプルプログラムの実行例

はじめに

 本稿では、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

1 2
→
INDEX
WinPcapを使用したパケットモニターの作成
Page1
はじめに
対象読者
必要な環境
WinPcapについて
パケットの取得
パケットの解析
まとめ
参考資料
プロフィール
古谷誠進 フルヤセイシン

自身で運営するWebサイト「SapporoWorks」では、ネットワーク関連のソフトウェアや開発技術を多数提供中。


注目の求人情報
システムエンジニア/人材紹介WEBポータル
・UNIX、Linuxベースの開発経験 ・PHP、JAVA、PostgreSQL、MySQLなどの経験2年以上 ・オブジェクト指...
プログラマ/通販専門Webコンサル企業
PHPでのプログラミング
システムエンジニア/新規事業に企画から携われる攻めのエンジニアの募集です。
・PerlによるWEBアプリケーションのプログラミング ・サーバなどの設定 ・モバイル新規事業のシステ...

(最新日付順)
名前(ゲストの方もコメントをどうぞ):*
アイコン:
なし

内容(テキストのみ1200文字まで):*

投稿規定に同意して

スポンサーサイト

この記事のトラックバックURL: