【问题标题】:How to get the same MAC address?如何获得相同的MAC地址?
【发布时间】:2015-05-07 23:17:56
【问题描述】:

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

【问题讨论】:

  • 我总是一样。
  • @addy2012 抱歉,我的意思是您可以在某个时候获得另一个 MAC 地址,而不是立即获得。
  • 在某个时候?你是什​​么意思?
  • @addy2012 我曾经打电话给它,得到了 MAC AF-BB……然后几天后我打电话给它,得到了 MAC D1-AE……
  • 它通常应该返回关于机器上所有适配器(已安装/启用)的信息。在上面的代码中,您只显示了第一个,因此如果顺序发生变化,您会看到不同的。当然,用户也可以(使用某些适配器)修改适配器的 MAC 地址。

标签: c++ c winapi


【解决方案1】:

由于 GetAdaptersInfo 方法包含的信息几乎与 IPCONFIG /ALL 一样多(包括您的 DHCP 服务器、网关、IP 地址列表、子网掩码和 WINS 服务器),您可以使用它。它还会枚举您 PC 上的所有 NIC,即使它们未连接到有效网络(但 NIC 必须在 Windows 中“启用”)

示例,打印所有接口:

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

【讨论】:

    【解决方案2】:

    我相信windows操作系统对网络适配器信息的枚举取决于网络适配器的优先级。 可以查看网络适配器的优先级,通过遍历到编辑

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多