グラフィカルなWindows用ネットワークツールを開発する
第1回:アーキテクチャの決定と開発環境の整備
この連載では、Linux上で開発したEthernetエミュレータをWindowsプラットフォームに移植し、グラフィカルで使いやすいネットワークツールの作成を目指します。今回は、全体のアーキテクチャの決定と開発環境の整備です。
はじめに
はじめまして。数年前に私の記事をお読みになっていただいた読者の皆さんは、お久しぶりです。NTTPCコミュニケーションズの波多浩昭といいます。ネットワークエンジニアリングの仕事をやっています。
以前(数年前になりますが)ここで、いくつかのネットワークツールをLinuxベースでご紹介しました。Linuxはそのような簡単なツールを開発するには便利なOSでした。しかし、読者の皆さんからご指摘をいただきましたように、使う人の側に立てば、必ずしも便利というわけではなかったようです。
確かにLinuxのいろいろなディストリビューションも進化してグラフィカルにもなってきましたが、多くの人が利用するWindowsへのツール開発を試みることにしました。まずは、以前に開発したEthernetエミュレータのLineeを題材に、Windowsプラットフォームへの移植にトライします。
最初は準備ということで、全体のアーキテクチャの決定と開発環境の整備を行います。
LineeのWindows版Wlineeアーキテクチャ
Lineeの開発は4年前の記事でした。図1のとおり、2つのEthernetの間にLinuxマシンを挟んで、その間に遅延やフレームロスを発生させて、品質の悪いEthernetを再現します。通信ソフトウェア開発や、通信品質計測をする実験に利用できるソフトウェアツールでした。
Lineeは2つのNICを搭載するパソコンで動作するソフトウェアで、Linuxを通常インストールした状態で、特殊なハードウェアやソフトウェアの追加は一切必要がないよう組み上げました。ソフトウェア操作により、ネットワークインタフェースをプロミスカスモードという特殊なモードに変えて、通常は受信しない他人宛のEthernetフレームも取り込むという動作をやっていました。
Windowsでもこのモードは可能だったのですが、取り込めるデータはIPパケットでした。Hubを作るのには、Ethernetフレームをまるまる取り込む必要があったのですがMACアドレスヘッダを取り込むには、デバイスドライバから開発しなければなりませんでした。
今回は何でも自力で解決するのではなく、誰でも利用できるオープンソースの力を借りることにしました。そのソフトウェアは、皆さんご存知のWinpcapです。WinpcapはWireshark(旧Ethereal)というネットワークプロトコルアナライザにも使われているオープンスースのデバイスドライバです。
これだけWiresharkがネットワークエンジニアに普及しているのなら、Winpcapも普及しているはずです。それを利用させていただくことにしました。このWindows版LineeをWlineeと名づけました。
図2のとおり、Wlineeは2つのパーツから構成することにしました。ひとつめは、Winpcapを呼び出してHubの動作をするフレーム転送エンジンともいうものです。WinpcapがC言語を使って書かれており、特殊な構造体を利用していることと、フレーム転送動作は高速性が要求されるために、エンジンはC言語を使ってDLLとします。
もうひとつのパーツはエンジンを制御するGUI部分です。ここは開発の容易性を考慮してC#を利用します。C言語もC#言語も開発環境はMicrofost社から無償でダウンロードが出来ます。以下では必要となる開発環境、およびWinPcatのインストールを説明します。
Visual C++のインストール執筆者のプロフィール
P.N.波多 浩昭(はた ひろあき)
NTTPCコミュニケーションズ ネットワーク事業部
ISPのバックボーンネットワークやVPNの企画設計に従事。
- 第1回:アーキテクチャの決定と開発環境の整備
- はじめに
- Visual C++のインストール
- VisualC#のインストール
- 第2回:WinpcapのPacket.dll APIの使い方
- Winpcap開発環境の整備
- アダプタを決定するためのAPI
- アダプタの性質を決定するAPI
- 受信のためのAPI
- Winpcapを使ってEthernetフレームモニタを作る
- 第3回:Ethernetエミュレータ「Linee」をWindowsに移植する
- 全体構成
- DLLのアーキテクチャ
- Windowsに移植するときの変更点(1)
- Windowsに移植するときの変更点(2)