| Welcome to SapporoWorks! We create stimulating network programs.
By a demand from user, SapporoWorks evolves. | ||||||||||||
| |||||||||||||
| 開発情報 > インターフェースの一覧取得 | |||||||||||||
|
●●●●概要 GetIfTable()を使用すると、現在のインターフェースの一覧が取得できます。 dwIndexを見ることで、他の一覧取得ライブラリと併用して情報を収集できそうです。 bPhysAddr でMACアドレス bDescr でインターフェースの名称など取得が可能です。 Iphlpapi.lib のリンクが必要です。 ●●●●ソース
#include <iphlpapi.h> //iphlpapi.lib をリンクする必要がある
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char Buf[1024];
DWORD d=0 ;
//第1パラメータにNULLをおいて、必要サイズを DWORD d に取得する
GetIfTable( NULL , &d, FALSE );
//MIB_IFADDRTABLEへのポインタに、必要サイズを確保する
PMIB_IFTABLE IfTable = (PMIB_IFTABLE)new char[d] ;
if( IfTable ){
//アドレステーブルの取得
if( GetIfTable( (PMIB_IFTABLE)IfTable,&d,FALSE) == NO_ERROR ){
//取得したテーブル数は、dwNumEntriesで分かる
for(int i=0;i< (int)IfTable->dwNumEntries;i++ ){
Memo1->Lines->Add("");
wsprintf(Buf,"dwIndex 0x%8.8x",(int)IfTable->table[i].dwIndex);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwType %d",(int)IfTable->table[i].dwType);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwMtu %d",(int)IfTable->table[i].dwMtu);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwSpeed %d",(int)IfTable->table[i].dwSpeed);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwPhysAddrLen %d",(int)IfTable->table[i].dwPhysAddrLen);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"bPhysAddr %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x"
,(unsigned char)IfTable->table[i].bPhysAddr[0]
,(unsigned char)IfTable->table[i].bPhysAddr[1]
,(unsigned char)IfTable->table[i].bPhysAddr[2]
,(unsigned char)IfTable->table[i].bPhysAddr[3]
,(unsigned char)IfTable->table[i].bPhysAddr[4]
,(unsigned char)IfTable->table[i].bPhysAddr[5]
);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwAdminStatus %d",(int)IfTable->table[i].dwAdminStatus);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwOperStatus %d",(int)IfTable->table[i].dwOperStatus);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwLastChange %d",(int)IfTable->table[i].dwLastChange);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwInOctets %d",(int)IfTable->table[i].dwInOctets);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwInUcastPkts %d",(int)IfTable->table[i].dwInUcastPkts);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwInNUcastPkts %d",(int)IfTable->table[i].dwInNUcastPkts);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwInDiscards %d",(int)IfTable->table[i].dwInDiscards);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwInErrors %d",(int)IfTable->table[i].dwInErrors);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwInUnknownProtos %d",(int)IfTable->table[i].dwInUnknownProtos);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwOutOctets %d",(int)IfTable->table[i].dwOutOctets);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwOutUcastPkts %d",(int)IfTable->table[i].dwOutUcastPkts);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwOutNUcastPkts %d",(int)IfTable->table[i].dwOutNUcastPkts);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwOutDiscards %d",(int)IfTable->table[i].dwOutDiscards);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwOutErrors %d",(int)IfTable->table[i].dwOutErrors);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwOutQLen %d",(int)IfTable->table[i].dwOutQLen);
Memo1->Lines->Add(Buf);
wsprintf(Buf,"dwDescrLen %d",(int)IfTable->table[i].dwDescrLen);
Memo1->Lines->Add(Buf);
IfTable->table[i].bDescr[IfTable->table[i].dwDescrLen]='\0';
wsprintf(Buf,"bDescr %s",(int)IfTable->table[i].bDescr);
Memo1->Lines->Add(Buf);
}
}
//MIB_IFADDRTABLEへのポインタに、確保したメモリを解放する
delete [] IfTable;
}
}
●●●●サンプル サンプルプログラム実行画面
ソースファイルのダウンロード 001-src.LZH 6Kbyte
実行ファイルのダウンロード 001-bin.LZH 202Kbyte
|
| 開発情報 > インターフェースの一覧取得 | |
copyright(c) 1995- SapporoWorks
当サイトはリンクフリーです。リンク時に連絡などは必要有りません。また、どのページにリンクして頂いても構いません。 | |