【问题标题】:Getting Machine's MAC Address -- Good Solution?获取机器的 MAC 地址——好的解决方案?
【发布时间】:2010-01-15 06:28:49
【问题描述】:

我听说用我当前的 winpcap 库是不可能的。

这是真的吗?我在网上看到很多例子,但后来 cmets 说“这不起作用”。

获取本地机器的 MAC 地址的最佳方法是什么?

【问题讨论】:

  • 什么好的解决方案?如果您的意思是为许可生成一些唯一的计算机标识符,我会说不应该依赖它。用户换网卡,有2张,没有网卡怎么办?

标签: c++ mac-address winpcap


【解决方案1】:

一种常见的方法是使用 UUID 中的位,但这并不完全可靠。例如,即使在没有网络适配器的机器上,它也会返回一个值。

幸运的是,有一种方法可以可靠地运行在任何相当新的 Windows 版本上。 MSDN 说它只能追溯到 Windows 2000,但如果没有记忆,它也可以在 NT 4 上工作,从 SP 5 开始,以防有人仍在使用 NT 4。

#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>

int main() {         
    IP_ADAPTER_INFO *info = NULL, *pos;
    DWORD size = 0;

    GetAdaptersInfo(info, &size);

    info = (IP_ADAPTER_INFO *)malloc(size);

    GetAdaptersInfo(info, &size);

    for (pos=info; pos!=NULL; pos=pos->Next) {
        printf("\n%s\n\t", pos->Description);
        printf("%2.2x", pos->Address[0]);
        for (int i=1; i<pos->AddressLength; i++)
            printf(":%2.2x", pos->Address[i]);
    }

    free(info);
    return 0;
}

请原谅古老的C代码...

【讨论】:

  • 这本身在一个项目中工作,但在带有 winpcap 的项目中,我试图在其中使用它,在 netioapi.h 中有很多编译器错误
【解决方案2】:

如果计算机具有 >1 个 NIC,则没有“该”MAC 地址之类的东西。您可以使用 WMI 查询此信息,http://techsupt.winbatch.com/TS/T000001002F19.html 了解更多详情

【讨论】:

    【解决方案3】:

    IPHelper 的 GetAdaptersAddresses()
    http://msdn.microsoft.com/en-us/library/aa365915%28VS.85%29.aspx
    我在 WinCE 上成功使用获取 operstatus,应该也可以使用 MAC 地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 2013-04-29
      相关资源
      最近更新 更多