この 2 つについてはどうですか:
07
次に、それらを次のように結合してハッシュできます:
16
末尾のダッシュを削除するには、パイプをもう 1 つ追加します:
24
@mikeserv が彼の回答で指摘しているように、インターフェース名はブート間で変わる可能性があります。これは、今日の eth0 が明日の eth1 になる可能性があることを意味するため、02
を grep すると 別のブートで別の MAC アドレスを取得する場合があります。私のシステムはこのように動作しないため、実際にテストすることはできませんが、考えられる解決策は次のとおりです:
13
の grep 28
の出力 ただし、特定の NIC に対応するものだけでなく、それらすべてを保持します。たとえば、私のシステムには次のものがあります:
38
両方の MAC アドレスを取得して 35
に渡す 、どのNICが何と呼ばれるかに関係なく、一意で安定した名前を取得できるはずです:
46
45
によって返された両方の MAC アドレスを渡しているため、ハッシュは上記のものとは異なることに注意してください。 54
まで .
代わりに、ハード ドライブの UUID に基づいてハッシュを作成します:
54
まず、CPUID は間違いなく ではないことに注意してください。 Intel Pentium III 以降のすべてのシステムで共通してアクセスできる一意の識別マーカーです。 MAC アドレスでそれをハッシュすると、確かに一意のマーカーにつながる可能性がありますが、これは MAC 自体の一意の品質によるものであり、その場合の CPUID は状況に応じたものにすぎません。さらに、結果として得られるハッシュは、マザーボードの UUID よりも一意である可能性が低く、取得がはるかに簡単で、プロセスでエラーが発生する可能性がはるかに低くなります。 wikipedia.org/wiki/cpuid から:
<ブロック引用>EAX=3 :プロセッサーのシリアル番号
参照:Pentium III § プライバシーの問題に関する論争
プロセッサのシリアル番号を返します。プロセッサのシリアル番号は Intel Pentium III で導入されましたが、プライバシー上の懸念から、この機能は後のモデルでは実装されなくなりました (PSN 機能ビットは常にクリアされます)。 Transmeta の Efficeon および Crusoe プロセッサもこの機能を提供します。ただし、AMD CPU は、どの CPU モデルにもこの機能を実装していません。
67
を実行すると、解析された cpuid を自分で表示できます または単に 77
.
これにより、Linux カーネルによって認識されるネットワーク インターフェイスのすべての MAC アドレスが得られると思います:
67
ランダムに生成された MAC を持つ仮想 NIC が含まれている可能性がある場合は、そのリストをフィルタリングする必要があります。 81
の呼び出しでフラグを使用してこれを行うことができます 直接。 95
を参照 その方法については、
また、この問題は 100
に固有のものではないことに注意してください 111
を使用する場合にも対処する必要があります 、しかし 120
でより確実に処理できること - 133
の一部です 143
よりも積極的にメンテナンスされています。 - 156
のメンバーです パッケージであり、最後に Linux がリリースされたのは 2001 年です。前回のリリース以降にカーネルの機能が変更されたため、160
は一部のネットワーク機能フラグを誤って報告することが知られており、その使用は可能な限り避ける必要があります。
ただし、171
のようなカーネル インターフェイス名でフィルタリングすることを理解してください。 これらは 182
による並列検出の順序に基づいて変化する可能性があるため、そうするための信頼できる手段ではありません。 起動プロセス中。詳細については、予測可能なネットワーク名を参照してください。
194
だから はシステムにインストールされていません。最初は、次のように生成されたハードディスク シリアルのリストをハッシュすることを考えていました:
79
203
を実行 そのリストを絞り込むための手がかりについては、たとえば、ディスクの種類ごとに。 219
も検討してください および/または 222
たぶん。
それらを組み合わせるのは簡単です:
85
あなたが私に知らせてくれたように、あなたはあなたの側でユーザーのリソースを一意のIDにキーイングしていて、ハードディスクが存在することを信頼することはできません.私は方針を変えると思いました.
それを考慮して、ファイルシステムをもう一度調べたところ、 236
が見つかりました フォルダ。いくつかのファイルをチェックしました:
95
ただし、これはかなり良いようですが、出力は公開しません:
103
249
の場所だと思います とにかく多くの情報を取得し、実際にそのように見えます。 253
によると 引数を指定することで、そのツールの使用を大幅に簡素化することもできます:
110
さらに単純ですが、ファイルを読み取るだけです。この特定のファイルは、マザーボードを明確に識別することに注意してください。 262
へのこれらのエクスポートを最初に実装した 2007 年のカーネル パッチからの抜粋を次に示します。 仮想ファイルシステム:
125
マザーボードが十分であれば、そのデータだけを使用してシステムを識別することができる場合があります。しかし、この情報をシステムの MAC と組み合わせることができます。この方法は、ハードディスクの場合と同じ方法で行うことができます:
130
Linux カーネルは、UUID を生成することもできます:
142
または:
155
確かに、これはランダムに生成され、ID の割り当てを再考する必要がありますが、取得 するのと同じくらい簡単です。 少なくとも。そして、それをキーにする手段を見つけることができれば、それはかなりしっかりしているはずです.
最後に、UEFI システムでは、すべての EFI ファームウェア環境変数に独自の UUID が含まれているため、これがはるかに簡単になります。環境変数 270
すべての UEFI システムに存在する必要があり、再起動後も持続し、ほとんどの ファームウェアのアップグレードと変更、および 286
を使用する Linux システム ロードされたモジュールは、次のように単純にいずれかまたは両方の名前をリストできます:
161
古い形式 - 298
明らかに現在は非推奨であり、新しいシステムでは 308
にする必要があります ただし、仕様によると、いずれかがすべての UEFI システムに存在する必要があります。少しの労力で、独自の再起動永続変数を定義でき、その方法でカーネルの UUID ジェネレーターをさらに活用できます。興味がある場合は、efitools を調べてください。
多くの最近のディストリビューションでは、ファイル 318
が同梱されています。 おそらく一意の 16 進数の 32 文字の文字列が含まれています。これは systemd に由来するもので、マンページにはより多くの情報があり、目的に適している可能性があります。