【问题标题】:How to get hardware MAC address on Windows如何在 Windows 上获取硬件 MAC 地址
【发布时间】:2010-10-23 20:08:48
【问题描述】:

我正在尝试从 NIC 检索 MAC 地址 - 有多种方法可以获取它,本文介绍了最常见的方法:

http://www.codeguru.com/Cpp/I-N/network/networkinformation/article.php/c5451

我目前正在使用 GetAdaptersInfo 方法,这似乎是最防弹的,但如果 MAC 地址已通过注册表设置:

http://www.mydigitallife.info/2008/06/30/how-to-change-or-spoof-mac-address-in-windows-xp-vista-server-20032008-mac-os-x-unix-and-linux/

然后它会报告它已更改为的 MAC 地址。我发现真正获得真正 MAC 的唯一方法是删除注册表项,重新启动 NIC,通过 GetAdaptersInfo 获取 MAC,然后替换注册表项,然后重新启动 NIC。虽然它完成了工作,但对用户来说几乎是不透明的。

是否还有其他任何人都熟悉的方法,无论注册表设置为什么,都将返回硬件 MAC?理想情况下,我想要一个可以在 XP 上运行的解决方案。

提前致谢!

【问题讨论】:

    标签: c++ winapi networking ndis


    【解决方案1】:

    我的猜测是,在链接的 CodeGuru 文章中,Miniport 解决方案可能会克服您描述的问题,尽管实施起来很痛苦。我认为这是因为我过去自己使用过 GetAdaptersInfo 解决方案,并注意到添加适配器时 MAC 地址会更改而无需重新启动,例如提供 PAN 服务的蓝牙适配器。

    也许您可以尝试停止并重新启动相关的网络服务,而不是在更改注册表设置后重新启动。在寻找程序化解决方案之前,您可以轻松地手动检查。

    (n.b. 以上都是猜测。如果您尝试它并且它有效,也许可以为将来尝试做同样事情的人添加一个帖子)。

    【讨论】:

    • 所以看起来 Miniport 解决方案有效,但很有可能在未来不受支持。我从 PCUSA 的 NDIS 专家那里找到了这个链接:pcausa.com/Utilities/macaddr2.htm 如果您修改他们的示例以查询 OID_802_3_PERMANENT_ADDRESS 而不是 OID_802_3_CURRENT_ADDRESS,它将返回硬件地址。
    • @Mark - 在过去的 8 年中,该链接已经过时了。 :(
    【解决方案2】:

    解析ipconfig /all的输出

    【讨论】:

    • ipconfig /all(至少在 Vista 上)只显示注册表中的 MAC 地址。
    【解决方案3】:

    您可以使用 WMI 枚举 Win32_NetworkAdapter 实例并查看 MACAddress 属性。如果您安装了多个活动适配器,则此技术的主要问题是找到合适的适配器实例,例如在也有无线连接的笔记本电脑上。

    【讨论】:

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