MAC Adresse kann man auch faken. Einen wirklichen sicheren Weg gibt es da nicht. Unter Windows gibt es da einen Registry Eintrag der zum Windows gehört. Also zumindest sicherstellt, das es immer nur auf einem Rechner laufen kann. Aber wenn du Plattform unabhängig sein willst wird das nichts.
Hast du Windows-Rechner? Da könntest du auch MAC-Adresse + Windows Serial Key nehmen, faken kann man aber immer, trotzdem wärs net gute Kombi denke ich
also wir berechnen hier zur eindeutigen Identifizierzung einzelner Rechner einen 20-stelligen Hashcode aus MAC-Adresse (es werden nur bestimmte Adapter berücksichtigt), hardwaremäßigem Rechnername und Volume-ID!
Das funktioniert, aber wie Thallius schon schrieb, ist auch das nicht hundertprozentig sicher!
Gruß Klaus
EDIT: "Windows Serial Key" ist problematisch, wenn in einer größeren Firma die Rechnersysteme einfach nur geclont werden ...
also wir berechnen hier zur eindeutigen Identifizierzung einzelner Rechner einen 20-stelligen Hashcode aus MAC-Adresse (es werden nur bestimmte Adapter berücksichtigt), hardwaremäßigem Rechnername und Volume-ID!
Das funktioniert, aber wie Thallius schon schrieb, ist auch das nicht hundertprozentig sicher!
Das Ermitteln einer eindeutigen, immer gleichen MAC-Adresse ist auf Desktop-Rechner kein Problem.
Mies wird das bei Laptops etc. da sich dort die Adapter permanent ändern können (bswp. durch das Einstecken ein WLAN-Sticks)
Ich habe das Problem hier wie folgt gelöst:
Java:
/**
* @brief Ermitteln die MAC-Adresse
* @result die MAC-Adresse
*/@SuppressWarnings("boxing")privateStringfSeekMACAdresse(){String strMACAdr ="00-00-00-00-00-00";try{Enumeration<NetworkInterface> nets =NetworkInterface.getNetworkInterfaces();for(NetworkInterface netint :Collections.list(nets)){for(InetAddress address :Collections.list(netint.getInetAddresses())){if( address instanceofInet4Address){System.out.println("<<"+ address +"##"+ netint.getName()+"##"+ netint.getDisplayName()+">>");String sName = netint.getName();String sDisplayName = netint.getDisplayName();// ACHTUNG: das führende Blank bei MINIPORT ist zwingend erforderlich// (da seit Java JDK 1.7_45 ggf. "Paketplaner-Miniport" ausgelesen wird)!!!if( sName.startsWith("eth")&&!sDisplayName.toUpperCase().contains("WAN")&&!sDisplayName.toUpperCase().contains(" MINIPORT")&&!sDisplayName.toUpperCase().contains("TUNNEL")&&!sDisplayName.toUpperCase().contains("BLUETOOTH")){StringDetectedIpAddress= address.getHostAddress();System.out.println("~~~ Current IP-Address: "+DetectedIpAddress);byte[] mac = netint.getHardwareAddress();StringBuilder sb =newStringBuilder();for(int i =0; i < mac.length; i++){
sb.append(String.format("%02X%s", mac[i],(i < mac.length -1)?"-":""));}return sb.toString();}}}}}catch(IOException e ){
e.printStackTrace();}return strMACAdr;}// fSeekMACAdresse
Musst mal schauen, ob Du damit was anfangen kannst!