Ich habe eine eigenständige Befehlszeilen-Java-App, die auf dem Server X ausgeführt wird. Und es ist für mich erforderlich, die eindeutige ID des Computers zu kennen, auf dem es ausgeführt wird. Wie bekomme ich diese ID? Vielleicht etwas wie ein Hash. Ich möchte nicht so etwas wie eine Datei mit ID drin behalten. Gibt es eine Möglichkeit, diese eindeutige ID zu erhalten, die nicht von IP, Hardware usw. abhängt?Java erhalten eindeutige Server-ID als Referenz
Antwort
Sie können die MAC-Adresse des Servers auslesen und als eindeutigen Schlüssel verwenden.
Das folgende Code-Snippet von http://www.tutego.de/blog/javainsel/2013/12/mac-adressen-auslesen/ zeigt eine mögliche Implementierung.
Es tut mir leid, dass die Quelle in Deutsch ist, aber ich bin ziemlich sicher, dass es auch eine englische Dokumentation gibt.
EDIT aufgrund Kommentar:
Es muss natürlich berücksichtigt werden, dass auch die MAC-Adresse Duplikate haben.
Der folgende Link zeigt mögliche Gründe https://serverfault.com/questions/462178/duplicate-mac-address-on-the-same-lan-possible
So oder so eine MAC-Adresse als eine Lösung für dieses Problem mit einem pragmatischen Weg.
Mit Hashing-Methoden: http://preshing.com/20110504/hash-collision-probabilities/
oder
GUIDs: Is it safe to assume a GUID will always be unique?
auch keine 0,0% Risiko für mögliche Duplikate garantieren.
MAC-Adressen können vom Benutzer geändert werden und sind nur innerhalb eines Subnetzes eindeutig. – EJP
@EJP Ich wusste, dass dieses Problem erwähnt werden würde und es kann sicher ein Problem sein. Aber die Wahrscheinlichkeit eines Zusammenstoßes ist ziemlich gering. – Diversity
Wenn Sie sich in einer virtualisierten Welt befinden, sagen Sie VMWare, verschieben Sie die VM auf einen neuen Host, ändern Sie die MAC-Adresse sowie andere Änderungen, wenn bestimmte Konfigurationseinstellungen richtig sind. –
Warum möchten Sie nicht auf Hardware z. MAC-Adresse? –
Soll die ID reproduzierbar (deterministisch) sein? Wenn nicht, erstellen oder verwenden Sie eine vorhandene UUID (unter Linux können Sie sich den Befehl "blkid" ansehen). –