2015-04-22 25 views
5

Ho un'app java da riga di comando autonoma che gira sul server X. E mi è richiesto di conoscere l'ID univoco della macchina su cui è in esecuzione. Come ottenere questo ID? Forse qualcosa come un hash. Non voglio tenere lì qualcosa di simile a un file con ID all'interno. C'è un modo per ottenere questo ID univoco che non dipende da IP, hardware, ecc.?java ottiene ID server univoco per riferimento

+0

Perché non si desidera dipendere dall'hardware, ad es. indirizzo MAC? –

+0

L'ID deve essere riproducibile (deterministico)? Altrimenti, basta creare o persino usare un UUID esistente (sotto linux si potrebbe dare un'occhiata al comando 'blkid'). –

risposta

2

È possibile leggere l'indirizzo MAC del server e utilizzarlo come chiave univoca.

Il seguente frammento di codice da http://www.tutego.de/blog/javainsel/2013/12/mac-adressen-auslesen/ mostra una possibile implementazione.

for (NetworkInterface ni : Collections.list(NetworkInterface.getNetworkInterfaces())) { 
    byte[] adr = ni.getHardwareAddress(); 
    if (adr == null || adr.length != 6) 
     continue; 
    String mac = String.format("%02X:%02X:%02X:%02X:%02X:%02X", 
           adr[0], adr[1], adr[2], adr[3], adr[4], adr[5]); 
    System.out.println(mac); 
} 

Mi dispiace che la fonte è in tedesco, ma sono abbastanza sicuro che esiste una documentazione inglese, anche.

EDIT causa di commentare:

Deve ovviamente da considerare che anche l'indirizzo MAC può avere duplicati.

link seguente mostra le possibili ragioni https://serverfault.com/questions/462178/duplicate-mac-address-on-the-same-lan-possible

In entrambi i casi si utilizza un indirizzo MAC come una soluzione per questo problema è un modo pragmatico.

Utilizzo di hashing-metodi: http://preshing.com/20110504/hash-collision-probabilities/

o

GUID: Is it safe to assume a GUID will always be unique?

anche non garantiscono un rischio 0,0% per eventuali duplicati.

+0

Gli indirizzi MAC possono essere modificati dall'utente e sono garantiti per essere unici all'interno di una sottorete. – EJP

+0

@EJP sapevo che questo problema sarebbe stato menzionato e sicuramente potrebbe essere un problema. Ma la probabilità di uno scontro è piuttosto piccola. – Diversity

+0

Se ci si trova in un mondo virtualizzato, ad esempio VMWare, lo spostamento del vm in un nuovo host cambia l'indirizzo mac e altre modifiche se alcune impostazioni di configurazione sono corrette. –