[ VC++ ] ネットワークアダプタの一覧を取得 ( GetAdaptersAddresses )

Pocket

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

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *