SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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


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

次のページ
パケットの取得

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/126 2007/12/10 13:51

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー