Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

RPCAPによるリモートパケットモニター

別のネットワークを流れるパケットをモニタする

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

ダウンロード 実行ファイル (15.0 KB)
ダウンロード ソースファイル (24.9 KB)

本稿では、WinPcapで提供されるRPCAPプロトコルに対応したプログラムを作成し、リモートで別ネットワークのパケットをキャプチャする方法について紹介します。

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

はじめに

 本稿では、WinPcapで提供されるRPCAPプロトコルに対応したプログラムを作成し、リモートで別ネットワークのパケットをキャプチャする方法について紹介します。また、.NET FrameworkのマネージコードからWinPcapを利用する例となるように、サンプルプログラムはC#で作成しました。

図1 リモートキャプチャの動作イメージ
図1 リモートキャプチャの動作イメージ

対象読者

  • .NET Frameworkを用いてWindowsアプリケーションを開発している方。
  • ネットワーク関連のプログラムを作成される方。

必要な環境

 サンプルはVisual Studio .NET 2003で作成し、.NET Framework 1.1で動作確認をしています。

 サンプルプログラムは、WindowsXP SP2・WinPcap 3.1で動作を確認しています。

リモートキャプチャ

 リモートキャプチャは、Remote Capture Protocol(以降「RPCAP」と表記)というプロトコルを使用し、サーバおよびクライアント上で動作する2つのプロセスで構成されています。

 クライアントで動作するプロセス(以降「RPCAPクライアント」と表記)は、WinPcapを利用した通常のプログラムです。そして、サーバ側で動作するプロセス(以降「RPCAPサーバ」と表記)は、rpcapdと呼ばれるリモートデーモンであり、実際のモジュールは「rpcapd.exe」です。

 RPCAPを使用すると、RPCAPサーバが動作する端末でのネットワーク・トラフィックをモニタして、RPCAPクライアントが動作する別のマシンで、そのパケットを処理(表示・保存など)することができます。

 WinPcapでは、このRPCAPを階層下に組み込むことで、WinPcapを使用するプログラムが特に意識することなく、このリモートキャプチャ機能を利用できるようになっています。

 今回作成したサンプルプログラムでは、従来のパケットモニターのようにローカルのインターフェースをモニタする「ローカル接続」モードと、RPCAPサーバに接続してRPCAPサーバのインターフェースをモニタする「リモート接続」モードの2つのモードで動作するようにしました。

図2 キャプチャ開始時のモード選択ダイアログ
図2 キャプチャ開始時のモード選択ダイアログ
高度な実験的機能
 RPCAPは、2005年11月現在、最新のWinPcap 3.1でもドキュメント上、an highly experimental feature(高度な実験的機能)と位置づけされており、完全な動作は保障されていないものと考えられます。しかし、私が使用してみた実感では、大きな問題は特に感じられませんでした。
 なお、今後のバージョンで仕様が変更される可能性は十分にありますので、ご利用の際は最新のドキュメントを確認していただく事をお勧めします。

RPCAPサーバの起動

 RPCAPサーバは、セキュリティ上のリスクを回避するためインストール時点では動作していません。そのため、これを使用するには利用者が起動する必要があります。

 PRCAPサーバは、標準的なWin32実行ファイルであり、サービスおよびコマンドラインのどちらからでも動作します。

サービスによる起動

 WinPcapをインストールすると、同時にサービスとしてRPCAPサーバが登録されます。[コントロールパネル]→[管理ツール]→[サービス]を選択すると、Remote Packet Capture Protocol v.0 (experimental)「Allows to capture traffic on this machine from a remote machine.」という行を確認することができます。インストールした時点では、スタートアップの種類は「手動」で、サービス状態は「停止」になっています。

図3 サービスからの起動
図3 サービスからの起動

 これを「開始」にするだけで、デフォルト設定でRPCAPサーバが起動します。

図4 RPCAPが2002番ポートでLISTENしている様子
図4 RPCAPが2002番ポートでLISTENしている様子
 図4は、『TCP/IPを利用しているプロセス情報を視覚的に表示する』で紹介した、ポートを使用しているプロセスを表示するサンプルプログラムを使用して、RPCAPサーバのデフォルトポートである2002番をLISTENINGしている「rpcapd.exe」を表示しています。

 サービスのプロパティで「実行ファイルのパス」を確認すると分かりますが、WinPcapをインストールしたフォルダにある「rpcapd.exe」というプログラムを-d「デーモン起動」で実行しているだけです。

実行ファイルのパス
"C:\Program Files\WinPcap\rpcapd.exe" -d -f
 "C:\Program Files\WinPcap\rpcapd.ini"

 また、パラメータを受け取るファイルは、同フォルダの「rpcapd.ini」になっており、このファイルを編集することで「rpcapd.exe」に起動パラメータを渡すことが可能になっています。

コマンドラインからの起動

 WinPcapインストールしていないコンピュータであっても、「rpcapd.exe」をコピーしてコマンドラインから起動することが可能です。

図5 コマンドラインからの起動
図5 コマンドラインからの起動

 ここでWinPcapドキュメントから、「rpcapd.exe」パラメータについて簡単に紹介しておきます。

rpcapdの起動スイッチ
スイッチ解説
-b <address>バインドするアドレス(デフォルトでは、すべてのローカルアドレスにバインドされます)
-p <port>バインドするポート番号(デフォルトでは、2002番ポートにバインドします)
-l <host_list_file>接続を許可するホストのリストを保存するファイル指定
-nNULL認証の許可(デフォルトでは、認証が必要になっています)
-a <host, port>デーモンをアクティブモードで実行
-dデーモンをバックグラウンド(サービス)で実行
-s <file>現在の設定をファイルに保存
-f <file>設定をファイルから読み込む
-hヘルプ表示
LinuxやBSD用のRPCAPサーバ
 WinPcap 3.1のドキュメントには、LinuxやBSDでRPCAPサーバをコンパイル可能であると紹介されています。makeの方法や注意点なども記述されていますので、興味のある方はぜひ試してみてください。

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

著者プロフィール

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

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

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