質問:次のように、ネットワーク化されたクライアントごとに一意の ID を考え出す必要があります。
- クライアント ソフトウェアがターゲット コンピューターにインストールされると、それ (ID) は持続する必要があり、ソフトウェアが同じコンピューターと同じ OS インストールに再インストールされた場合でも持続する必要があります。
- ハードウェア構成がほとんどの方法で変更された場合 (マザーボードの変更を除く)、変更しないでください。
- クライアント ソフトウェアがインストールされたハード ドライブが、同一のハードウェア構成 (または可能な限り類似した構成) を持つ別のコンピューターに複製される場合、クライアント ソフトウェアはその変更を認識する必要があります。
少しの説明と裏話:
この質問は基本的に古くからの質問であり、ソフトウェアのコピー防止のトピックにも触れています。その分野で使用されているメカニズムのいくつかがここで言及されているためです。この時点で、コピー防止スキームを探しているわけではないことを明確にしておく必要があります。読んでください。:)
私は、ローカル ネットワークで動作するはずのクライアント サーバー ソフトウェアに取り組んでいます。私が解決しなければならない問題の 1 つは、ネットワーク内の一意の各クライアントを識別することです (それほど大きな問題ではありません)。これにより、特定の属性をすべての特定のクライアントに適用し、特定のクライアントの展開ライフタイム中にそれらの属性を保持および適用できます。クライアント。
解決策を探していたときに、次のことに気付きました。
- Windows アクティベーション システムは、ハードウェアの変更に非常に敏感なある種の重いフィンガープリンティング メカニズムを使用します。
- ディスク イメージング ソフトウェアは、すべてのボリューム ID (フォーマット時に各パーティションに結び付けられる) と、インストール プロセス中、最初の実行中、またはその他の方法で一意に生成されたカスタム ID に沿ってコピーします。ハードドライブ上にあるため、2 つを混同するのは非常に簡単です。
この種の問題に対する明らかな選択は、BIOS 識別子を見つけることです (ただし、これが同一のマザーボード モデルで一意であるかどうかは 100% 確実ではありません)。 、そしてそれは変更できません(少なくとも、ユーザー空間プログラムを使用することによってはできません)。それ以外はすべて、信頼性が低い (MAC の複製など) か、要求が高すぎる (構成の変更に敏感すぎるという点で) 失敗します。
私が尋ねたい副次的な質問は、私はそれを正しく、アーキテクチャ的に行っていますか? おそらく、私が達成しなければならないタスクのためのより良いツールがあるでしょう...
私が念頭に置いていた別のアプローチは、サーバーが接続されたクライアント ID の内部ルックアップ テーブルを維持するハンドシェイク メカニズムに似たものです (完全にソフトウェア ベースで、任意の時点で一意ではない場合もあります)。接続時に重複した ID が提供された場合、ハンドシェイク中に別の ID を考え出します。残念ながら、このアプローチは、有効期間中に属性を特定のクライアントに結び付けるという要件の 1 つにはうまく対応できません。