2

我想要通过 c++ 程序获得 MAC PC 的机器唯一 ID,例如处理器 ID、硬盘 ID、uuid。谁能告诉我它是如何实现的?谢谢。

4

2 回答 2

1

仅在大约 7 年后,但这是我们一直在使用的那些偶然发现的答案。

  1. 它使用 IOPlatformExpertDevice 类来访问 Mac 序列号/硬件 uuid
  2. 有两种方法可以做到这一点,第一种使用 C++,第二种使用 python。我个人使用了第二种方式,并且可以验证它是否获取系统信息给出的硬件 uuid。

第一种方法,未​​经我自己测试,但使用相同的类,因此至少有可能工作,请参阅https://gist.github.com/tmiz/1294978 ,了解 C++ 中有关如何检索“序列号”的例程这与系统信息中的硬件uuid不同,但通过一些调整,您应该能够获得硬件uuid。

第二种方法(参见下面的python代码),在python中使用ioreg命令,该命令通过单独的进程执行,然后使用正则表达式处理结果以获取uuid。此方法肯定会检索硬件 uuid,因为我已经使用 macos 10.14 和以前版本的 10.13 和 10.12 中的系统信息应用程序进行了检查。

愿这些方法为您服务,它们不返回 mac 地址,因此应该作为机器的 uuid 正常工作,而不仅仅是网络接口。

最后,您可以在此处阅读有关 ioreg 的信息 -> http://www.manpagez.com/man/8/ioreg/和更一般的 I/O 工具包 -> https://developer.apple.com/library/archive/文档/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]
于 2019-03-13T06:38:33.503 回答
0

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

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

于 2012-08-17T05:47:17.637 回答