Newsgroup: it.comp.java
Titolo: Leggere Info Hardware AntiCopia

Salve,
tutti i programmi java con un semplice copia incolla della root
continuano a funzionare (ed è un bene in genere) ma se necessitassi di
rendere una copia una volta installata (a prescindere dal S.O. in uso)
non copiabile come potrei fare?
Ho pensato di leggere le info Hardware la prima volta e inserirle in
un db per poi confrontare successivamente tali valori ma la jvm non
"rilascia" tale info pertanto vi chiedo se conoscete qualche sistema/
libreria per poter leggere queste info?
Ho trovato Hyperic Sigar che appare ottimo ma è sotto licenza GPL
mentre necessito di libreria integrabile in software proprietario.
Avevo pensato anche ad un semplice utilizzo dei Preferences
(controllare se c'è o meno una coppia chiave/valore ben precisa) ma
credo di aver capito che è possibile che sulla stessa macchina
cambiando/aggiornando la JVM tali informazioni possano sparire (e
quindi rendere inutilizzabile anche la copia corretta).
Ringrazio Anticipatamente

 Ringrazio Anticipatamente
Potresti provare con una semplice chiamata ad una funzione scritta in c 
attraverso JNI.... 

 attraverso JNI....
Vorrei che la lettura dell'hardware fosse possibile sia su Windows,
Linux che Mac OS pertanto peseguendo quella strada dovrei ricreare un
Hyperic Sigar da zero da me, decisamente sopra le possibilità. Ammeno
che non ci sia qualche "magia" in C.... ma non conosco minimamente...

 libreria per poter leggere queste info?
Potresti usare i metodi System.getenv (reintrodotto dalla 1.5) o 
.getProperties per leggere adeguate informazioni sul pc (es. nome 
computer/host, certamente non il path ;) ).
E' un sistema un po' "terra-terra" per� per evitare copie da utenti non 
troppo esperti dovrebbe bastare...
Ciao

 Ciao
Grazie dell'interessamento, ho controllato tali informazioni ma sono
in genere poco incisive e addirittura per System.getenv si hanno
variabili/valori diversi da S.O. a S.O. quindi non utilizzabile.
Alla fine ho "risolto" leggendo l'unico dato hardware fattibile per
Java e cioè il MAC Address, non d'ha molte garanzie ma non ho trovato
di meglio.
Il codice è il seguente:
<pre>
public static String getMACAddress() throws Exception {
        String hardware_id =null;
        Enumeration<NetworkInterface> interfaces =
NetworkInterface.getNetworkInterfaces();
        NetworkInterface localInterface;
        do {
            localInterface = interfaces.nextElement();
        } while (localInterface.isLoopback());
        byte[] mac = localInterface.getHardwareAddress();
        hardware_id = HexToStringConverter.getHexString(mac);
        return hardware_id;
    }
</pre>
come si nota evito di prendere la scheda di loopbak che addirittura in
certi casi alla chiamata del metodo getHardwareAddress() lancia
un'eccezione ma prendo la prima 'valida', ho provato su più pc
utilizzando internet key/wireless ma non schede di rete pcmcia e devo
dire che il primo MAC Address valido è rimasto invariato sia esso la
scheda wireless per un portatile o una scheda Ethernet per un fisso
quindi anche se ancora ho dei dubbi direi che ci si può 'fidare' del
primo MAC Address preso.
Peccato che per la lettura di informazioni Hardware più incisive per
più S.O. occorra uno sviluppo di un'applicazione apparte in
pratica.....
Ciao!

 di meglio.
Attenzione che il MAC Address di solito rimane fisso ma pu� essere 
facilmente cambiato dall'utente (da un amministratore locale o di rete), 
sia su win (� una voce del registry) che su *nix (bastano un ifconfig).
Cosa che comunque vale anche per le variabili che ho indicato poc'anzi... ;)
Ciao.