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
当サイトはリンクフリーです。リンク時に連絡などは必要有りません。また、どのページにリンクして頂いても構いません。