获取机器的MAC地址 - 良好的解决方案?

时间:2010-01-15 06:28:50

标签: c++ mac-address winpcap

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

这是真的吗?我在网上看到了很多例子,然后评论说“这不起作用”。

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

3 个答案:

答案 0 :(得分:6)

一种常见方法是使用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代码......

答案 1 :(得分:5)

如果计算机具有> 1 NIC,则不存在“MAC”地址。您可以使用WMI http://techsupt.winbatch.com/TS/T000001002F19.html查询此信息以获取更多详细信息

答案 2 :(得分:0)

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