ここでは、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
参考