メイン   モジュール   デー タ構造   ファイルリスト   データフィールド   グローバル   関連ページ   注意事項   English

デバイスリストの獲得方法
[WinPcap プログラミング入門編]


 まず第一に通常は、WinPcapベースのアプリケーションに必要なものは、適応するネットワークアダプタリストです。libpcapは次の目的のため に関数 pcap_findalldevs() を用意します。この関数は、アダプタに関する総合的な情報を含んだそれぞれの、pcap_if 構造体にリンクされるリストを返します。特に、フィールドの名前と解説には、そのアダプタの名前と人が読んで理解しやすい解説を含みます。

 続く以下のコードは、アダプタリストを取り出してそれを画面に表示し、アダプタが見つからなければエラーを表示します。

#include "pcap.h"

main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];

/* Retrieve the device list */ if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}

/* Print the list */ for(d=alldevs;d;d=d->next)
{
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
else printf(" (No description available)\n");
}

if(i==0)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return;
}

/* We don't need any more the device list. Free it */ pcap_freealldevs(alldevs);
}

 このコードについて、幾つかのコメントを記します。

 最初に、他のlibpcap関数と同様 pcap_findalldevs() はエラーバッファ(errbuf)パラメータを持っています。このパラメータは、何かうまくいかない時に、libpcapによってエラーの記述が格納され た文字列を指します。

 次に、pcap_findalldevs() はUnix下においてもlibpcapによって提供されることに注目してください。ですが、全てのlibpcapにサポートされるOSがネットワークイン ターフェイスの詳細を提供する訳ではない事を覚えておいてください。従って、もしポータブルアプリケーションを作成したければ、ネットワークインターフェ イスの詳細がNULLだった時のケースを考えなければなりません。そういった場合は、「得られる詳細がありません(No description available)」といったエラーを表示する必要があります。

 最後に、プログラムを終了するときに一旦 pcap_freealldevs() 関数でネットワークアダプタリストを開放していることに注目してください。
 それではこの最初のサンプルとコンパイルして実行してみましょう。UnixやCygwin下でコンパイルするためには以下の文を宣言します:

gcc -o testaprog testprog.c -lpcap

 Windowsではプロジェクトを生成する必要がありますので、このマニュアル内のセクション「プログラムでWinPcapを利用する方法」 にある手順を参照してください。ですが、多くの正確に構成されたアプリケーション用例、この入門編とプロジェクトに出てくる全てのコード、サンプルプログ ラムをコンパイルして実行するのに必要なインクルードファイルとライブラリが収容されたデベロッパーズパック(http://winpcap.polito.it で配布されている)を使用することをお奨めします。

 プログラムがコンパイルできたとして、実行してみましょう。筆者のWinXPワークステーションではこのような結果になりました。

1. {4E273621-5161-46C8-895A-48D0E52A0B83} (Realtek RTL8029(AS) Ethernet Adapter)
2. {5D24AE04-C486-4A96-83FB-8B5EC6C7F430} (3Com EtherLink PCI)

 見て分かる通り、Windows下ではネットワークアダプタの名前(デバイスをオープンしたときにlibpcapに渡される)が判読できませんの で、続く隣にある解説はユーザーにとって非常に有効なものとなっています。


documentation. Copyright (c)2002-2003 Politecnico di Torino.
2005 translated by Telebusiness,Inc.
 All rights reserved.