我希望通过C++程序获取机器唯一标识,比如处理器ID、硬盘ID和MAC电脑的UUID。 请问有人可以告诉我具体实现方法吗? 谢谢。
仅有约7年之后,但这里为遇到此问题的人提供一个解答,我们一直在使用以下方法:
第一种方法是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]
除了一些古老的处理器外,x86 CPU 没有软件可见的序列号。
苹果建议您使用计算机的主要网络接口的 MAC 地址(即,如果存在,则为板载 Ethernet 控制器,否则为无线接口)作为系统的唯一标识符。在 Apple 的验证 Mac App Store 收据文档中提供了执行此操作的示例代码(在“获取计算机的 GUID”下面)。