如何获得相同的MAC地址?

时间:2015-05-07 23:17:56

标签: c++ c winapi

我使用以下代码获取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地址(例如:以太网)。

2 个答案:

答案 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

代码来自:http://www.codeguru.com/cpp/i-n/network/networkinformation/article.php/c5451/Three-ways-to-get-your-MAC-address.htm

答案 1 :(得分:1)

我认为windows os对网络适配器信息的枚举取决于网络适配器的优先级。 可以通过遍历

来查看,编辑网络适配器的优先级

开放网络和共享中心 - >更改适配器设置 - >高级[启用菜单栏,如果不可见] - >高级设置。 可以编辑网络适配器的优先级。 enter image description here