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

标签 c++ windows-vista mac-address

我们目前正在使用 NetBios method , 在 XP 下工作正常。在 Vista 下的初步测试表明它也可以工作,但有一些警告 - NetBIOS 必须存在,例如,根据我一直在阅读的内容,适配器的顺序肯定会改变。我们的替代方法 - 使用 SNMPExtensionQuery - 似乎在 Vista 下坏了。

问题是:您知道在 Vista 机器上获取本地 MAC 地址列表的可靠方法吗?与 XP 的向后兼容性是一个优势(我宁愿有一个单一的方法也不愿有很多丑陋的#ifdef's)。谢谢!

最佳答案

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

void getdMacAddresses(std::vector<std::string> &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;

    }
}

关于C++:在 Vista 上获取网络适配器的 MAC 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/221894/

相关文章:

c++ - std::string operator+() 内存泄漏?

delphi - 如何在 Vista 文件打开对话框中禁用通配符模式的自动附加

windows-7 - 作为开发人员,我应该如何使用 Windows Vista(和 Windows 7)中的特殊文件夹?

windows-vista - Windows批处理文件: calling executable in another directory

iphone - iphone 的 mac 地址是静态的吗?寻找一种方法来识别哪个用户在线

java - 通过mac地址获取ip地址

c++ - 友元函数看不到私有(private)成员变量

c++ - Visual Studio从2005年升级到2015年,C++ GUI保留XP主题而不是系统主题

C++ 模板包扩展/可变参数

android - 通过蓝牙检测附近的另一个安卓设备