2010-08-06 7 views
4

Je sais que c'est long, mais y a-t-il un moyen d'obtenir le numéro de série ou une information unique identifiable sous Linux?Appel système pour obtenir le numéro de série de la machine sous linux (programmé en java)

Si oui, comment cela peut-il être programmé dans un programme Java?

Dans le contexte, j'ai besoin de construire un validateur de licence qui se verrouille sur une machine, si vous avez d'autres suggestions, elles sont les bienvenues.

Merci à l'avance

Répondre

4

Voici un extrait d'un blog post par Lennart Poeterring sur les ID en général. Il est sur le point ID unique, pas nécessairement ID unique en relation avec la sécurité:

  • /sys/class/DMI/id/product_uuid: La principale UUID produit de conseil, tel par le fabricant du conseil et codé dans les informations BIOS DMI. Il peut être utilisé pour identifier une carte mère et uniquement la carte mère . Il change lorsque l'utilisateur remplace la carte principale. En outre, souvent, un nombre suffisant de fabricants de BIOS écrivent des séries erronées . En outre, il est x86 spécifique. L'accès pour les utilisateurs non privilégiés est interdit. Par conséquent, il est de peu d'utilisation générale.

  • CPUID/EAX = 3 Numéro de série de l'UC: Un UUID d'UC, défini par le fabricant de l'UC et codé sur la puce de l'UC. Il peut être utilisé pour identifier une CPU et seulement une CPU. Il change lorsque l'utilisateur remplace le CPU . En outre, la plupart des processeurs modernes n'implémentent plus cette fonctionnalité, et les anciens ordinateurs ont tendance à désactiver cette option par défaut, contrôlable via une option de configuration du BIOS . En outre, il est x86 spécifique. Par conséquent, cela aussi est de peu d'utilisation générale.

So/sys/class/DMI/id/product_uuid semble démon ALIDATION comme un bon candidat, mais a besoin de votre code de validation pour être exécuté en tant qu'utilisateur privilégié. L'article de blog complet est vraiment une lecture précieuse!

0

J'utilise la MAC-Adresse comme un identifiant unique.

InetAddress address = InetAddress.getByName("192.168.1.1"); 
NetworkInterface ni = NetworkInterface.getByInetAddress(address); 
byte[] mac = ni.getHardwareAddress(); 
+0

Avant 1.6, obtenir l'adresse MAC était assez difficile, IIRC. Je pense que le code natif ou l'analyse de la sortie de la ligne de commande était nécessaire. –

0

L'adresse Mac peut être modifiée. Vérifiez this. En outre, l'adresse Mac est liée à une interface (Ethernet/Wireless/HPNA, etc.). Donc, un utilisateur intelligent peut facilement modifier cela. Il y a un problème similaire discuté sur stackoverflow. Vérifiez this.

2

Sauf si vous pouvez réellement obtenir une clé matérielle à la machine de l'utilisateur, vous ne pouvez pas concevoir un paramètre de protection contre la copie qui ne peut pas être contourné. Si vous voulez juste dire à l'utilisateur que "hé, vous utilisez déjà cette licence sur une autre machine sur votre réseau, procurez-vous une autre licence", alors un bon moyen est de faire des diffusions réseau pour qu'ils puissent se trouver. Le moyen le plus simple de le faire est probablement d'utiliser Zeroconf avec la bibliothèque jmdns. Si vous voulez être certain que le programme est exécuté uniquement à un avec un numéro de série donné, la seule façon de le faire avec des PC génériques est d'avoir le programme appel un réseau central sur Internet tout en être exécuté et enregistrer où il est utilisé. Le vaisseau mère renvoie ensuite un extrait contenant un code important nécessitant son exécution. Vous pourriez très probablement implémenter ceci en utilisant Java WebStart.

+0

J'ai oublié de mentionner dans ma question que l'unité ne peut pas appeler à la maison sur Internet – Candyfloss

+0

Ensuite, je voudrais opter pour une solution commerciale si vous avez besoin d'être infaillible. –

0

L'adresse MAC n'est pas un bon choix, car elle peut être modifiée sur certains systèmes. Si vous souhaitez rester en Java natif, les paramètres système logiques tels que l'ID d'ordinateur et le compte de connexion utilisateur sont vos seules options. Dans certains cas, le nom de la machine est correctement sécurisé car il ne peut y avoir deux machines sur le même réseau.

Questions connexes