获取MAC OS X的计算机ID

时间:2012-08-17 04:42:12

标签: c++ macos

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

2 个答案:

答案 0 :(得分:0)

仅在大约7年后,但这是对那些我们一直在使用的绊脚石的答案。

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

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

第二种方法(请参见下面的python代码),在python中,它使用ioreg命令,该命令是通过单独的进程执行的,然后使用正则表达式处理结果以获取uuid。正如我在macOS 10.14中的“系统信息”应用程序以及10.13和10.12的早期版本中检查的那样,此方法肯定会检索硬件uuid。

也许这些方法对您有用,它们不会返回mac地址,因此应该可以很好地用作计算机的uuid,而不仅仅是网络接口。

最后,您可以在这里-> http://www.manpagez.com/man/8/ioreg/阅读有关ioreg的信息,而在这里-> https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/Families_Ref/Families_Ref.html#//apple_ref/doc/uid/TP0000021-BABHIGFE

可以更全面地了解I / O套件。
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]

答案 1 :(得分:-1)

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

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