Visualizzazione dei risultati da 1 a 5 su 5

Discussione: ID Scheda Madre

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    31

    ID Scheda Madre

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    31
    Uppino
    Nessuno mi può aiutare??? Magari una dritta, un commento, una critica...tutto è gradito! Grazie ancora

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Xanakro
    Uppino
    Nessuno mi può aiutare??? Magari una dritta, un commento, una critica...tutto è gradito! Grazie ancora
    L'ID della scheda madre è una proprietà hardware. Java, di per sé, lavora in una virtual machine... dell'hardware non sa, non può e non deve sapere nulla.

    L'unica "soluzione" è usare del codice nativo (quindi, del codice fortemente legato alla piattaforma in cui gira, quindi niente portabilità). Il codice che hai trovato (una tecnica decisamente pessima, a mio avviso), funziona solo in particolari condizioni:

    1) L'applicazione deve girare su ambiente Windows (o ok)
    2) L'applicazione deve avere permessi di scrittura nella sua cartella di installazione (e ci può stare)
    3) L'utente che esegue l'applicazione deve avere permessi di esecuzione di script VBS (e non sempre questo è garantito)... non sono nemmeno sicuro che tutte le versioni di Windows supportino VBS.

    Per questo credo esistano delle tecniche decisamente migliori, come l'uso, appunto, di codice nativo (ovvero, per Windows delle DLL che effettuano quelle operazioni, per altri sistemi, ci saranno altre librerie).

    Sinceramente non lavoro con ambienti MAC, quindi non ti so aiutare... ma fossi in te cercherei una soluzione alternativa anche per quanto rigurda Windows.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    un minimo di alternativa, sempre legata all'hardware ce l'hai: il MAC Address di una qualche NetworkInterface presente nella macchina. Guarda qui:
    MAC Address
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    31
    Grazie mille a entrambi
    Mi butterò sul MAC Address dunque! Sperando che nessun utente trovi il modo di cambiarlo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.