使用Python获取唯一的硬件ID

时间:2016-07-12 11:53:38

标签: python hardware uniqueidentifier mac-address

我有一个过程需要我识别不同的机器,我不确定最好的方法是什么。 我不想在文本文件或其他东西上保存该ID,但我想在每次需要时从硬件生成它(如果带有ID的文本被删除或者其他东西)

我已经检查了UUID,看起来不错,但我不确定。 我已经看了 uuid.getNode(),但我遇到了2个问题:

  1. 一部分说“如果所有获取硬件地址的尝试都失败了,我们选择一个随机的48位数字,其第八位设置为1,如RFC 4122中所推荐的”,这意味着我可能会得到一个不同的由于某些原因在某些系统上是唯一的 - 有没有办法确定哪个时间失败并生成其他东西?

  2. 另一部分说:“”硬件地址“表示网络接口的MAC地址,在具有多个网络接口的计算机上,可以返回其中任何一个的MAC地址。”,这意味着如果我有2个不同的网络适配器,每次调用我可以得到其中任何一个?这对我不好。

  3. 如果您有更好的方法来获取机器的唯一ID,我每次都可以生成,而不必担心删除它或其他东西 - 我很高兴听到它。我寻找某些东西的所有尝试都失败了。 感谢。

6 个答案:

答案 0 :(得分:6)

请注意,您可以从Windows获得相同的UUID,而无需使用以下命令安装任何其他软件:

C:\> wmic csproduct get uuid

答案 1 :(得分:2)

您可以使用dmidecode

<强> Linux的:

import subprocess

def get_id():
    return subprocess.Popen('hal-get-property --udi /org/freedesktop/Hal/devices/computer --key system.hardware.uuid'.split())

<强>窗:
注意:需要dmidecode for Windows

import subprocess

def get_id():
    return subprocess.Popen('dmidecode.exe -s system-uuid'.split())

<强>跨平台:
注意:需要dmidecode for Windows

import subprocess
import os

def get_id():
    if 'nt' in os.name:
        return subprocess.Popen('dmidecode.exe -s system-uuid'.split())
    else:
        return subprocess.Popen('hal-get-property --udi /org/freedesktop/Hal/devices/computer --key system.hardware.uuid'.split())

答案 2 :(得分:1)

对于Windows,这似乎每次基于MAC地址为每个设备提供相同的uuid:

STR(uuid.uuid1(uuid.getnode(),0))[24:

但它似乎在Android 4.4.2上没有相同的ID。

答案 3 :(得分:0)

或使用bios serialnr

wmic bios get serialnumber

答案 4 :(得分:0)

我所采用的理想方法是这样。这是非常快速和高效的。

hwid = str(subprocess.check_output(
    'wmic csproduct get uuid')).split('\\r\\n')[1].strip('\\r').strip()
data = requests.get(
    'https://gist.githubusercontent.com/rishav394/z/raw/x')
if hwid in data.text:
    print('Authenticated!')
    auth = True
else:
    print(hwid + ' was not found on the server.\nNot authorised!')

答案 5 :(得分:0)

这对我有用:

import subprocess

current_machine_id = str(subprocess.check_output('wmic csproduct get uuid'), 'utf-8').split('\n')[1].strip()

print(current_machine_id)