Ich muss Mac-Adresse von einem Gerät erhalten, wenn diese MAC-Adresse für alle Typen dieses Geräts eindeutig sein sollte und nicht in der Zeit änderbar. Ich lese viele Themen und probiere sie aus, aber kein einziger Weg hilft nicht. Im Folgenden sind alle Möglichkeiten, die ich verwendet habe.Wie bekomme ich MAC-Adresse von Gerät
Von Motherboard:
public static String getMotherboardSN() {
String result = "";
try {
File file = File.createTempFile("realhowto", ".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs =
"Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
+ "Set colItems = objWMIService.ExecQuery _ \n"
+ " (\"Select * from Win32_BaseBoard\") \n"
+ "For Each objItem in colItems \n"
+ " Wscript.Echo objItem.SerialNumber \n"
+ " exit for ' do the first cpu only! \n"
+ "Next \n";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return result.trim();
}
Von HDD:
public static String getSerialNumber(String drive) {
String result = "";
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n"
+"Set colDrives = objFSO.Drives\n"
+"Set objDrive = colDrives.item(\"C\")\n"
+"Wscript.Echo objDrive.SerialNumber"; // see note
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return result.trim();
}
Von CPU:
private static String getWindowsCPU_SerialNumber() {
String result = "";
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs1=
"Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
+ "Set colItems = objWMIService.ExecQuery _ \n"
+ " (\"Select * from Win32_Processor\") \n"
+ "For Each objItem in colItems \n"
+ " Wscript.Echo objItem.ProcessorId \n"
+ " exit for ' do the first cpu only! \n"
+ "Next \n";
fw.write(vbs1);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
}
catch(Exception E){
System.err.println("Windows CPU Exp : "+E.getMessage());
}
return result.trim();
}
Dies ist von UUID:
private void getUUID(){
String uniqueID = UUID.randomUUID().toString();
System.out.println(uniqueID);
}
Von InetAddress:
private void getMacFromInetAddress(){
String mmm = "123";
try {
InetAddress ip = InetAddress.getLocalHost();
System.out.println("Current IP address : " + ip.getHostAddress());
Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
while (networks.hasMoreElements()) {
NetworkInterface network = networks.nextElement();
byte[] mac = network.getHardwareAddress();
if (mac != null) {
System.out.print("Current MAC address : ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
mmm = sb.toString();
System.out.println(mmm);
}
}
} catch (UnknownHostException | SocketException e) {
System.out.println(e.getLocalizedMessage());
}
}
Auf den Methoden von MB, HDD, CPU, InetAddress wenn ich den Code auf mehrere identische Parameter Computern ausgeführt werden, kehren sie den gleichen Code. Von UUID, wenn Code ausgeführt wird, gab es zum ersten Mal einen anderen Code, zum zweiten Mal einen anderen Code. Wie bekomme ich eine eindeutige ID für einen Computer, wenn er sich nicht mit der Zeit auf Java ändert? Ich habe OS Windows benutzt.
sagen wir das: mein Programm für jede Maschine gibt nur einen eindeutigen Schlüssel. Wenn ich uuid erzeuge und lokalen Speicher speichere, dann kopiert der Klient dieses Programm mit lokalem Speicher und setzt ihn auf einen anderen Rechner anstelle mit einem lokalen Schlüssel .... – Saahon