我使用以下代码获取MAC地址:
IP_ADAPTER_INFO adpInfo[16];
DWORD len = sizeof(adpInfo);
GetAdaptersInfo(adpInfo, &len );
printf("%02x%02x%02x%02x%02x%02x", adpInfo[0].Address[0], adpInfo[0].Address[1], adpInfo[0].Address[2], adpInfo[0].Address[3], adpInfo[0].Address[4], adpInfo[0].Address[5]);
但是,如果计算机有许多网络适配器(例如:以太网和WiFi),那么每次调用此代码时,我都会获得不同的MAC地址。
是否有办法始终获得相同的MAC地址(例如:以太网)。
答案 0 :(得分:3)
由于GetAdaptersInfo方法包含的信息几乎与 IPCONFIG / ALL (包括您的DHCP服务器,网关,IP地址列表,子网掩码和WINS服务器)一样多,您可以使用它。它还会枚举您PC上的所有NIC,即使它们未连接到有效网络(但必须在Windows中启用NIC并且#34;
)示例,打印所有界面:
static void GetMACaddress(void)
{
IP_ADAPTER_INFO AdapterInfo[16];
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen);
assert(dwStatus == ERROR_SUCCESS);
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
do {
PrintMACaddress(pAdapterInfo->Address);
pAdapterInfo = pAdapterInfo->Next;
}
while(pAdapterInfo);
}
您可以保存 AdapterName ,然后在下次调用中对其进行比较,以确保检索到指定适配器的MAC。
在这里查看 IP_ADAPTER_INFO 结构:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366062%28v=vs.85%29.aspx
答案 1 :(得分:1)
我认为windows os对网络适配器信息的枚举取决于网络适配器的优先级。 可以通过遍历
来查看,编辑网络适配器的优先级开放网络和共享中心 - >更改适配器设置 - >高级[启用菜单栏,如果不可见] - >高级设置。 可以编辑网络适配器的优先级。