使用Python获取唯一的硬件ID

Tzu*_*rEl 4 python hardware mac-address uniqueidentifier

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

我检查过UUID,看起来还可以,但我不确定.我看了一下uuid.getNode(),但我遇到了2个问题:

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

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

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

Cip*_*rum 9

你可以使用dmidecode.

Linux:

import subprocess

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

Windows:
注意:Windows需要dmidecode

import subprocess

def get_id():
    return subprocess.Popen('dmidecode.exe -s system-uuid'.split())
Run Code Online (Sandbox Code Playgroud)

跨平台:
注意:Windows需要dmidecode

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())
Run Code Online (Sandbox Code Playgroud)


小智 7

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

C:\> wmic csproduct get uuid
Run Code Online (Sandbox Code Playgroud)

  • 使用子进程从python代码运行它:import subprocess current_machine_id = subprocess.check_output('wmic csproduct get uid').split('\n')[1] .strip() (3认同)