1. #1
    Futur Membre du Club
    Inscrit en
    février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : février 2011
    Messages : 10
    Points : 6
    Points
    6

    Par défaut interface java eclipse qui marche sur le numero de serie d'un disque dur

    Bonjour :

    j'ai le code suivant qui donne le numéros de série d'in disque dur :

    est ce qu'ont peux faire une interface ou exécutable qui marche uniquement sur ce numéros de série C'est a dire on introduira ce dernier dans le code de l'interface , si en change de disque dur ou ordinateur l'interface ne s'exécutera pas ( moyen de sécuriser l’interface créer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    	public void actionPerformed(ActionEvent arg0) {
     
     
    				String sc = "cmd /c" + "wmic diskdrive get serialnumber";
     
    			    Process p = null;
    				try {
    					p = Runtime.getRuntime().exec(sc);
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			    try {
    					p.waitFor();
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
     
    			    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
     
    			    String line;
    			    StringBuilder sb = new StringBuilder();
     
    			    try {
    					while ((line = reader.readLine()) != null) {
    					    sb.append(line);
    					}
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} 
     
    			    System.out.println("HDD Serial number: " + sb.substring(sb.toString().lastIndexOf("r") + 1).trim());
    			}
     
     
     
    		});
    merci pour support et aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 288
    Points : 24 713
    Points
    24 713
    Billets dans le blog
    2

    Par défaut

    Salut,

    Sur le principe, oui.

    Mais
    1. ton code ne marche que sur Windows. C'est très restrictif. Mais admettons qu'on ait un code qui fonctionne sur tous les OS.
    2. quid s'il y a plusieurs disques durs sur la machine ?
    3. comme ton code intègre le numéro, d'une façon ou d'une autre, il faut mettre en place une build dynamique. On peut imaginer un premier programme qui s'exécute sur le poste, en collectant l'id du disque, l'envoie à un serveur qui génère le programme final à exécuter.
      le code Java, à fortiori tout autre fichier de config texte ou binaire, est facile lisible, donc l'id devra être chiffré.
    4. tout code Java peut-être manipulé par qui voudra forcer l'exécution quelque soit le disque dur, avec peu d'effort. Il y a des moyens d'augmenter l'effort à engager pour ça, certe.
    5. il faudra mettre en place une procédure de transfert, parce qu'un disque dur ça tombe en panne, ou on le remplace pour différentes raisons, ou on change de machine pour différentes raisons également. Et j'en connais peu qui utiliseront une application (à fortiori qui achèteront) avec le moindre risque de ne plus pouvoir le faire au bout d'un certain temps (déjà le risque même que l'application soit faite par un indépendant et donc que la pérénité est faiblement garantie est parfois bloquant).

    En bref, tout ceci demande pas mal de travail et de complexité pour pas grand chose à mon avis.

    La première question qu'on doit se poser : pourquoi mettre en place une telle "sécurité" ? Parce que l'application est payante et qu'on ne veut pas qu'une personne l'achète et la refile à d'autres ? Parce qu'on veut un système de licence payante par instance, donc empêcher l'utilisateur d'utliser l'application sur plusieurs postes ? Il y a d'autres moyens de financement qui n'impose aucune restriction sur l'exécutable, mais peuvent être rentable. La pub, l'apport de services complémentaires (indispensables ou non à son fonctionnement), il y a même les donnations (bien que pour ça on peut être dubitatif sur la rentabilité)...et évidemment, un prix d'achat de base avec contrat de licence.

    La question concernant la sécurisation est toujours : l'application mérite-t-elle l'effort de sécurisation engagé, en contre-partie de l'effort nécessaire pour contourner cette sécurité. Si ton application rend un service indubitable, indispensable et sans concurrence et que l'effort pour la produire soi-même est difficile, long ou complexe, on utilisera ton application. Si cette utilisation est payante et que l'effort pour contourner la sécurité est faiblement proportionnel à l'intérêt qu'on a de l'utiliser, tout effort de sécurisation sera vain. Seule des dispositifs légaux et la confiance dans les utilisateurs seront une protection suffisante. Dans le domaine industriel, c'est assez facile à faire respecter. Dans le domaine public, quasiment aucune chance. Dans le domaine industriel, on peut envisager de plutôt travailler sur l'aspect service. Dans le domaine public, c'est plus compliqué.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Inscrit en
    février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : février 2011
    Messages : 10
    Points : 6
    Points
    6

    Par défaut

    salut :

    merci pour vos remarques et conseils .

    j'ai effectué une interface graphique , je voulais donné l'exécutable a des amies que je sélectionne seulement .

    j'ai trouvé une autre piste via VBscript et j'ai besoin d’assistance et explication :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    import java.io.File;
    import java.io.FileWriter;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
     
    public class VBSUtil {
     
        private VBSUtil() {
        }
        static String result = "";
     
        private static String getMotherboardSN() {
            try {
                File f = new File("C:\\");
                File file = File.createTempFile("realhowto", ".vbs", f);
                file.deleteOnExit();
                FileWriter fw = new java.io.FileWriter(file);
                String vbs = "On Error Resume Next\n" + "strComputer = \".\"\n" + "Set objWMIService = GetObject(\"winmgmts:\\\\\" & strComputer &  \"\\root\\cimv2\")\n" + "Set colItems = objWMIService.ExecQuery(\"Select * from  Win32_Processor\")\n" + "For Each objItem in colItems\n" + " Wscript.Echo \"Processor Id: \" & objItem.ProcessorId\n" + "Next\n" + "strComputer = \".\"\n" + "Set objWMIService = GetObject(\"winmgmts:\" _\n" + "  & \"{impersonationLevel=impersonate}!\\\\\" & strComputer &  \"\\root\\cimv2\")\n" + "Set colBIOS = objWMIService.ExecQuery _\n" + "(\"Select * from Win32_BIOS\")\n" + "For each objBIOS in colBIOS\n" + "  Wscript.Echo \"Release Date: \" & objBIOS.ReleaseDate\n" + "next";
                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();
        }
    }
     
     
    Merci

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    août 2006
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 3 499
    Points : 6 872
    Points
    6 872

    Par défaut

    Oui sinon il y'a plus simple que ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (FileStore store: FileSystems.getDefault().getFileStores()) {
    	     System.out.format("%-20s vsn:%s\n", store, Integer.toHexString(Integer.parseInt(""+store.getAttribute("volume:vsn"))));
    	}
    Mais ca ne fonctionnera que sous windows...

    Après les remarques de Joel restent valables.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Inscrit en
    février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : février 2011
    Messages : 10
    Points : 6
    Points
    6

    Par défaut

    merci wax78:

    j'ai deux questions:

    1/ sur votre code une fois le volume récupérer comment faire pour que l'application sera marché uniquement sur ce dernier .

    2/ pour le code ci-dessous , j'ai pu récupérer Processor Id , comment faire la suite pour que l'Id récupérer sera associer définitivement à l'exécutable créer (.jar).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    public class Misc {
     
    	private JFrame frame;
     
    	public static String getMotherboardSN() {
    		  String result = "";
    		  try {
    	            File f = new File("C:\\");
    	            File file = File.createTempFile("realhowto", ".vbs", f);
    	            file.deleteOnExit();
    	            FileWriter fw = new java.io.FileWriter(file);
    	            String vbs = "On Error Resume Next\n" + "strComputer = \".\"\n"
    	 + "Set objWMIService = GetObject(\"winmgmts:\\\\\" & strComputer &  \"\\root\\cimv2\")\n" 
    	+ "Set colItems = objWMIService.ExecQuery(\"Select * from  Win32_Processor\")\n" 
    	+ "For Each objItem in colItems\n" + " Wscript.Echo \"Processor Id: \" & objItem.ProcessorId\n" 
    	+ "Next\n" + "strComputer = \".\"\n" + "Set objWMIService = GetObject(\"winmgmts:\" _\n"
    	 + "  & \"{impersonationLevel=impersonate}!\\\\\" & strComputer &  \"\\root\\cimv2\")\n" + "Set colBIOS = objWMIService.ExecQuery _\n" 
    	+ "(\"Select * from Win32_BIOS\")\n" + "For each objBIOS in colBIOS\n" + "  Wscript.Echo \"Release Date: \" & objBIOS.ReleaseDate\n" + "next";
    	            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 = Misc.getMotherboardSN();
    		 System.out.println(cpuId);
     
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					Misc window = new Misc();
    					window.frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    Merci

Discussions similaires

  1. code qui marche sur firefox et pas sur IE7
    Par taka10 dans le forum JavaScript
    Réponses: 5
    Dernier message: 15/03/2007, 11h59
  2. application qui marche sur pc et sur le mobile
    Par phoenix8006 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 02/03/2007, 21h08
  3. créer un exe qui marche sur d'autres machines
    Par alexIsBack dans le forum Visual C++
    Réponses: 2
    Dernier message: 24/09/2006, 18h29
  4. Réponses: 4
    Dernier message: 30/08/2006, 08h37
  5. [Studio .NET] Executable qui marche sur des PC différents
    Par black is beautiful dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 05/10/2005, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo