2015-04-22 33 views
5

Sunucu X üzerinde çalışan bir bağımsız komut satırı java uygulamasına sahibim. Ve bu, çalıştığı makinenin benzersiz kimliğini bilmem için gereklidir. Bu kimlik nasıl alınır? Belki bir karma gibi bir şey. İçinde kimliği olan bir dosya gibi bir şey tutmak istemiyorum. IP'ye, donanıma, vs. bağlı olmayan bu benzersiz kimliği elde etmenin bir yolu var mı?java başvuru için benzersiz bir sunucu kimliği olsun

+0

Neden donanıma bağlı olmak istemiyorsunuz, ör. Mac adresi? –

+0

Kimlik tekrarlanabilir mi (determinist)? Değilse, sadece mevcut bir UUID'yi yaratın veya kullanın (linux altında 'blkid' komutuna bakabilirsiniz). –

cevap

2

Sunucunun MAC adresini okuyabilir ve benzersiz bir anahtar olarak kullanabilirsiniz.

Aşağıdaki kod parçacığı http://www.tutego.de/blog/javainsel/2013/12/mac-adressen-auslesen/ olası bir uygulamayı göstermektedir.

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); 
} 

Kaynağın Almanca olduğu için üzgünüm, ancak bir ingilizce dökümantasyonunun da mevcut olduğundan eminim. nedeniyle

DÜZENLEME yorum yapmak:

Elbette ayrıca MAC adresi çiftleri sahip olabileceği dikkate alınması gereken gerekmektedir.

olarak aşağıdaki bağlantıyı olası nedenleri https://serverfault.com/questions/462178/duplicate-mac-address-on-the-same-lan-possible

bu sorun için bir çözüm pragmatik bir yol olduğu gibi MAC adresini kullanarak iki şekilde de göstermektedir.

kullanma karma-yöntemler: http://preshing.com/20110504/hash-collision-probabilities/

veya

GUID'lerini

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

Olası yinelenen bir% 0,0 riskini garanti etmiyoruz.

+0

MAC adresleri kullanıcı tarafından değiştirilebilir ve sadece bir alt ağ içinde benzersiz olması garanti edilir. – EJP

+0

@EJP Bu sorunun söz konusu olacağını biliyordum ve kesinlikle bir sorun olabilir. Ancak bir çatışmanın olasılığı oldukça küçüktür. – Diversity

+0

Sanallaştırılmış bir dünyada iseniz, VMWare deyin, vm'yi yeni bir ana bilgisayara taşıyın, mac adresini ve ayrıca belirli yapılandırma ayarlarının doğru olması durumunda diğer değişiklikleri değiştirin. –