当前位置:  开发笔记 > 编程语言 > 正文

C++:在Vista上获取网络适配器的MAC地址?

如何解决《C++:在Vista上获取网络适配器的MAC地址?》经验,为你挑选了1个好方法。

我们目前正在使用NetBios方法,它在XP下运行正常.Vista下的初步测试表明它也有效,但有一些警告 - 例如,NetBIOS必须存在,而且从我读过的内容来看,适配器的顺序必将发生变化.我们的替代方法 - 使用SNMPExtensionQuery - 似乎在Vista下被打破了.

问题是:您是否知道在Vista计算机上获取本地MAC地址列表的可靠方法?向后兼容XP是一个优点(我宁愿使用一个单一的方法,而不是许多丑陋的#ifdef).谢谢!



1> Brian R. Bon..:

这将为您提供计算机上所有MAC地址的列表.它也适用于所有版本的Windows:

void getdMacAddresses(std::vector &vMacAddresses;)
{
    vMacAddresses.clear();
    IP_ADAPTER_INFO AdapterInfo[32];       // Allocate information for up to 32 NICs
    DWORD dwBufLen = sizeof(AdapterInfo);  // Save memory size of buffer
    DWORD dwStatus = GetAdaptersInfo(      // Call GetAdapterInfo
    AdapterInfo,                 // [out] buffer to receive data
    &dwBufLen);                  // [in] size of receive data buffer

    //No network card? Other error?
    if(dwStatus != ERROR_SUCCESS)
        return;

    PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
    char szBuffer[512];
    while(pAdapterInfo)
    {
        if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
        {
            sprintf_s(szBuffer, sizeof(szBuffer), "%.2x-%.2x-%.2x-%.2x-%.2x-%.2x"
                , pAdapterInfo->Address[0]
                , pAdapterInfo->Address[1]
                , pAdapterInfo->Address[2]
                , pAdapterInfo->Address[3]
                , pAdapterInfo->Address[4]
                , pAdapterInfo->Address[5]
                );
            vMacAddresses.push_back(szBuffer);
        }
        pAdapterInfo = pAdapterInfo->Next;

    }
}

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有