gpt4 book ai didi

python - 机器的固定标识符 (uuid.getnode)

转载 作者:太空狗 更新时间:2023-10-29 19:26:34 26 4
gpt4 key购买 nike

我试图找到一些我可以用作我的脚本的唯一字符串/数字的东西,它固定在机器上并且很容易获得(跨平台)。我假设一台机器会有网卡。我不需要它真的很独特,但必要的是它应该长期固定并且尽可能少见。

我知道 MAC 可以更改,我可能会在我的脚本中对此发出警告,但我不希望任何人每天早上更改 MAC。

我想到的是uuid.getnode(),但是在docs有:

If all attempts to obtain the hardware address fail, we choose a random 48-bit number

这是否意味着对于每个函数调用我都会得到另一个随机数,因此如果无法获得 MAC 就无法使用它?

...on a machine with multiple network interfaces the MAC address of any one of them may be returned.

这句话是否意味着 getnode() 从所有可用的 MAC 中获取随机(或第一个)MAC?如果它在第一次运行时得到 MAC A,下次运行时得到 MAC B 怎么办?如果我得到一个固定列表(排序、连接、tadaaa!),那就没问题了

我问是因为我没有办法自己测试。

最佳答案

我设法在我的 android 设备上测试了第一部分,并且在每次新的 python 运行时它都创建了随机数,因此它根本不能用于此目的。

第二个问题本身就被淹没了,因为如果在文档中它提到它可能返回其中任何一个,那么它不是你可以依赖的东西(+我找不到我可以测试它的机器)。一个不错的包 netifaces 来拯救,它做了类似的事情

netifaces.interfaces() # returns e.g. ['lo', 'eth0', 'tun2']

netifaces.ifaddresses('eth0')[netifaces.AF_LINK]
# returns [{'addr': '08:00:27:50:f2:51', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]

但是我宁愿放弃使用 MAC,我得到了更稳定的东西。

现在是标识符:

1) window :

执行这个并获得输出可能就足够了:

wmic csproduct get UUID

或者我使用的那个在注册表中可用(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography):

import _winreg
registry = _winreg.HKEY_LOCAL_MACHINE
address = 'SOFTWARE\\Microsoft\\Cryptography'
keyargs = _winreg.KEY_READ | _winreg.KEY_WOW64_64KEY
key = _winreg.OpenKey(registry, address, 0, keyargs)
value = _winreg.QueryValueEx(key, 'MachineGuid')
_winreg.CloseKey(key)
unique = value[0]

2)Linux:

/sys/class/dmi/id/board_serial

/sys/class/dmi/id/product_uuid

或者如果不是 root:

cat /var/lib/dbus/machine-id

3) 安卓:

如果你正在使用 python 并且不想弄乱 Java 的东西,那么这应该工作得很好:

import subprocess
cmd = ['getprop', 'ril.serialnumber']
self.unique = subprocess.check_output(cmd)[:-1]

但是如果你喜欢 Java,那就去 this answer尽管即使 ANDROID_ID 的唯一性是否允许更改也值得商榷,因此序列号很可能是更安全的选择。

请注意,就像链接答案中已经提到的那样,即使 ril.serialnumber 也可以为空/空或不存在(缺少 key )。即使官方 Android API 也会发生同样的事情明确指出:

A hardware serial number, if available.

Mac/iPhone:我找不到任何解决方案,因为我无法访问其中任何一个,但如果有一个变量保存机器 ID 值,那么你应该能够通过简单的 subprocess.check_output() 到达那里

关于python - 机器的固定标识符 (uuid.getnode),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com