我们目前正在使用 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/