如何在 Win32 API C++ 中枚举网络适配器并获取其 MAC 地址?

问题描述 投票:0回答:1

如何在 Win32 API C++ 中枚举网络适配器并获取其 MAC 地址?

c++ winapi ethernet mac-address
1个回答
14
投票

这段代码应该可以工作:

{
    ULONG outBufLen = 0;
    DWORD dwRetVal = 0;
    IP_ADAPTER_INFO* pAdapterInfos = (IP_ADAPTER_INFO*) malloc(sizeof(IP_ADAPTER_INFO));

    // retry up to 5 times, to get the adapter infos needed
    for( int i = 0; i < 5 && (dwRetVal == ERROR_BUFFER_OVERFLOW || dwRetVal == NO_ERROR); ++i )
    {
        dwRetVal = GetAdaptersInfo(pAdapterInfos, &outBufLen);
        if( dwRetVal == NO_ERROR )
        {
            break;
        }
        else if( dwRetVal == ERROR_BUFFER_OVERFLOW )
        {
            free(pAdapterInfos);
            pAdapterInfos = (IP_ADAPTER_INFO*) malloc(outBufLen);
        }
        else
        {
            pAdapterInfos = 0;
            break;
        }
    }
    if( dwRetVal == NO_ERROR )
    {
        IP_ADAPTER_INFO* pAdapterInfo = pAdapterInfos;
        while( pAdapterInfo )
        {
            IP_ADDR_STRING* pIpAddress = &(pAdapterInfo->IpAddressList);
            while( pIpAddress != 0 )
            {
                          // 
                          // <<<<
                          // here pAdapterInfo->Address should contain the MAC address
                          // >>>>
                          // 

                pIpAddress = pIpAddress->Next;
            }
            pAdapterInfo = pAdapterInfo->Next;
        }
    }
    free(pAdapterInfos);
    return false;
}
© www.soinside.com 2019 - 2024. All rights reserved.