さまざまなマシンを識別する必要があるプロセスがありますが、それを行うための最良の方法がわかりません。そのIDをテキストファイルなどに保存したくないのですが、必要になるたびにハードウェアから生成したい(IDのあるテキストが削除された場合など)
[〜#〜] uuid [〜#〜] を確認しましたが、問題ないようですが、よくわかりません。 uuid.getNode()を確認しましたが、2つの問題があります。
一部には、「ハードウェアアドレスを取得するすべての試みが失敗した場合、RFC 4122で推奨されているように、8番目のビットが1に設定されたランダムな48ビット番号を選択します」と書かれています。理由-失敗した時間を特定して他の何かを生成する方法はありますか?
別の部分は次のように述べています。「「ハードウェアアドレス」はネットワークインターフェイスのMACアドレスを意味し、複数のネットワークインターフェイスを備えたマシンでは、いずれか1つのMACアドレスが返される場合があります。」つまり、2つの異なるネットワークアダプターがある場合、呼び出しごとに、いずれか1つを取得できますか?それは私には良くありません。
マシンの一意のIDを取得するためのより良い方法があれば、毎回生成でき、削除などの心配はありません。それを聞いてうれしいです。何かを見つけるための私の試みはすべて失敗しました。ありがとう。
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())
次のコマンドを使用して、追加のソフトウェアをインストールしなくても、Windowsから同じUUIDを取得できることに注意してください。
C:\> wmic csproduct get uuid
私が頼った理想的なアプローチはこれでした。それは非常に高速で効率的です。
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!')
Windowsの場合、MACアドレスに基づいて各デバイスで毎回同じuuidを取得するようです。
str(uuid.uuid1(uuid.getnode()、0))[24:]
しかし、Android 4.4.2では同じIDを保持していないようです。
またはBIOSシリアル番号を使用します
wmic bios get serialnumber