获取 MAC OS X 的机器 ID

3

我希望通过C++程序获取机器唯一标识,比如处理器ID、硬盘ID和MAC电脑的UUID。 请问有人可以告诉我具体实现方法吗? 谢谢。


1
找到了获取唯一平台ID的方法https://dev59.com/YXNA5IYBdhLWcg3wgeId - Derek Wade
2个回答

3

仅有约7年之后,但这里为遇到此问题的人提供一个解答,我们一直在使用以下方法:

  1. 使用IOPlatformExpertDevice类来访问Mac串行号/硬件uuid
  2. 有两种方法可以实现这一点,第一种使用C ++,第二种使用Python。我个人使用了第二种方式,并且可以验证它检索了由系统信息给出的硬件uuid。

第一种方法是C++编写的,尚未经过我的测试,但使用相同的类,因此至少具有潜在的工作能力,请参见https://gist.github.com/tmiz/1294978以获取“序列号”的例程,它与系统信息中的硬件uuid不同,但通过一些调整,您应该能够获取硬件uuid。

第二种方法(请参见下面的Python代码),使用了ioreg命令,该命令通过单独的进程执行,然后使用正则表达式处理结果以获取uuid。此方法绝对检索硬件uuid,因为我已经用macOS 10.14和以前版本的10.13和10.12中的System Information应用程序进行了检查。

希望这些方法能为您服务,它们不返回MAC地址,因此应作为机器的uuid而不仅仅是网络接口的功能良好。

最后,您可以在此处阅读有关ioreg-> http://www.manpagez.com/man/8/ioreg/以及更普遍的I/O Kit -> https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/Families_Ref/Families_Ref.html#//apple_ref/doc/uid/TP0000021-BABHIGFE

import platform, re, os

os_type = platform.system()

if os_type == 'Darwin':

    machine_uuid_str = ''

    p = os.popen('ioreg -rd1 -c IOPlatformExpertDevice | grep -E \'(UUID)\'', "r")

    while 1:
        line = p.readline()
        if not line: break
        machine_uuid_str += line

    match_obj = re.compile('[A-Z,0-9]{8,8}-' +\
                       '[A-Z,0-9]{4,4}-' +\
                       '[A-Z,0-9]{4,4}-' +\
                       '[A-Z,0-9]{4,4}-' +\
                       '[A-Z,0-9]{12,12}')

    results = match_obj.findall(machine_uuid_str)

    return results[0]

0

除了一些古老的处理器外,x86 CPU 没有软件可见的序列号。

苹果建议您使用计算机的主要网络接口的 MAC 地址(即,如果存在,则为板载 Ethernet 控制器,否则为无线接口)作为系统的唯一标识符。在 Apple 的验证 Mac App Store 收据文档中提供了执行此操作的示例代码(在“获取计算机的 GUID”下面)。


我需要机器ID以进行许可证授权。 - user1586515
1
就像我说的那样,MAC地址是你可能得到的最好的标识符。 - user149341

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接