web-dev-qa-db-ja.com

Python)で一意のハードウェアIDを取得する

さまざまなマシンを識別する必要があるプロセスがありますが、それを行うための最良の方法がわかりません。そのIDをテキストファイルなどに保存したくないのですが、必要になるたびにハードウェアから生成したい(IDのあるテキストが削除された場合など)

[〜#〜] uuid [〜#〜] を確認しましたが、問題ないようですが、よくわかりません。 uuid.getNode()を確認しましたが、2つの問題があります。

  1. 一部には、「ハードウェアアドレスを取得するすべての試みが失敗した場合、RFC 4122で推奨されているように、8番目のビットが1に設定されたランダムな48ビット番号を選択します」と書かれています。理由-失敗した時間を特定して他の何かを生成する方法はありますか?

  2. 別の部分は次のように述べています。「「ハードウェアアドレス」はネットワークインターフェイスのMACアドレスを意味し、複数のネットワークインターフェイスを備えたマシンでは、いずれか1つのMACアドレスが返される場合があります。」つまり、2つの異なるネットワークアダプターがある場合、呼び出しごとに、いずれか1つを取得できますか?それは私には良くありません。

マシンの一意のIDを取得するためのより良い方法があれば、毎回生成でき、削除などの心配はありません。それを聞いてうれしいです。何かを見つけるための私の試みはすべて失敗しました。ありがとう。

6
TzurEl

dmidecodeを使用できます。

Linux:

import subprocess

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

Windows:
注:Windowsの場合は dmidecodeが必要です

import subprocess

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

クロスプラットフォーム:
注: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())
3
Ciprum

次のコマンドを使用して、追加のソフトウェアをインストールしなくても、Windowsから同じUUIDを取得できることに注意してください。

C:\> wmic csproduct get uuid
9
nauj27

私が頼った理想的なアプローチはこれでした。それは非常に高速で効率的です。

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!')
1
Rishav

Windowsの場合、MACアドレスに基づいて各デバイスで毎回同じuuidを取得するようです。

str(uuid.uuid1(uuid.getnode()、0))[24:]

しかし、Android 4.4.2では同じIDを保持していないようです。

1
Jorge

またはBIOSシリアル番号を使用します

wmic bios get serialnumber
0
Luc Hermans