Buongiorno! Sto sviluppando un programmino che dovrebbe essere attivato attraverso un seriale univoco. In pratica: quando l'utente tenta di far partire il programma la prima volta viene generato un file serialRequest.dat che altro non è che l'id della sua scheda madre crittato con una chiave pubblica (che gli fornisco). Lui mi invia il file che io provvedo a decrittare con la chiave privata e in questo modo ottengo l'id della sua scheda madre. Successivamente creo l'hash md5 di questo id e questo è proprio il seriale (che dovrebbe essere univoco).
Ora tutto funziona correttamente su macchine windows, ma non su mac. Il problema nasce dal fatto che la classe che ho trovato per recuperare l'id della scheda madre è windows-based, ve la posto per far capire meglio
codice:
public class MiscUtils {
private MiscUtils() { }
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();
}
public static void main(String[] args){
String cpuId = MiscUtils.getMotherboardSN();
javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
null, cpuId, "Motherboard serial number",
javax.swing.JOptionPane.DEFAULT_OPTION);
}
}
Chiaramente non funziona su mac! Qualcuno sa come si fa a recuperare questo id?
Grazie in anticipo e buona giornata