ここでは、VC++ の GetAdaptersAddresses 関数を使用してネットワークアダプタの一覧を取得するサンプルコードを掲載しています。詳細はサンプル中のコメントを参照ください。
スポンサーリンク
//#include <stdio.h> //#include <stdlib.h> //#include <winsock2.h> //#include <ws2tcpip.h> //#include <iphlpapi.h> /* for IP Helper API */ //#include <limits.h> //#include <ws2tcpip.h> //#pragma comment(lib, "ws2_32.lib") //#pragma comment(lib, "iphlpapi.lib") PIP_ADAPTER_ADDRESSES pAdapterAddresses, pAA; DWORD dwRet, dwSize; // ネットワークアダプタリストの一覧を格納するために // 必要なバッファサイズを取得する dwRet = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, NULL, &dwSize); if (dwRet != ERROR_BUFFER_OVERFLOW) { exit(1); } // 一覧を格納する領域を確保 pAdapterAddresses = (PIP_ADAPTER_ADDRESSES)malloc(dwSize); if (pAdapterAddresses == NULL) { exit(1); } // アダプタリストの取得 dwRet = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, pAdapterAddresses, &dwSize); if (dwRet != ERROR_SUCCESS) { exit(1); } // アダプタ一覧を出力 for (pAA = pAdapterAddresses; pAA; pAA = pAA->Next) { char szAdapterName[BUFSIZ]; int len; /* Unicode から ShiftJIS に変換 */ len = WideCharToMultiByte(CP_ACP, 0, pAA->FriendlyName, wcslen(pAA->FriendlyName), szAdapterName, sizeof(szAdapterName), NULL, NULL); if (len == 0) { exit(1); } szAdapterName[len] = '\0'; printf("Adapter Name : %s\n", szAdapterName); printf("IfIndex : %u\n\n", pAA->IfIndex); } // メモリの解放 free(pAdapterAddresses);
出力結果例
Adapter Name : Bluetooth ネットワーク接続
IfIndex : 14
Adapter Name : ワイヤレス ネットワーク接続
IfIndex : 13
Adapter Name : ローカル エリア接続
IfIndex : 11
Adapter Name : ローカル エリア接続 2
IfIndex : 17
Adapter Name : ローカル エリア接続 3
IfIndex : 18
Adapter Name : Loopback Pseudo-Interface 1
IfIndex : 1
参考