6
votes

ID spécifique à l'ordinateur?

J'essaie de générer un ID d'ordinateur spécifique à l'aide de Java. J'ai réfléchi à des choses comme des séries de disque dur ou des touches de série Windows, des identifiants de la CPU ou des adresses MAC, mais d'autres ordinateurs pourraient avoir les mêmes. Par exemple, si quelqu'un pirait une copie de Windows 7, ils pourraient avoir la même série. Comme quelqu'un .. Je me demandais si quelqu'un pouvait me donner un moyen de générer un identifiant spécifique à l'ordinateur qui n'est jamais changé et est récupérable à l'aide de Java?

J'ai fait des recherches et j'ai trouvé des fonctions utiles. Et je pensais quelque chose comme ça. Mais s'ils changent de matériel, cela changera l'ID d'ordinateur. Quelqu'un sache de quelque chose que je peux utiliser? xxx


10 commentaires

Alors, comment définissez-vous l'unicité de l'ordinateur? Je penserais que s'ils changent le matériel, ils changent leur identifiant.


Exactement, et j'essaie de trouver un moyen de générer un identifiant d'ordinateur qui ne changera pas quand ils changent de matériel.


Ce serait l'aboutissement d'une fantaisie longue tenue par les propriétaires de droits d'auteur et des créateurs de DRM partout. Le problème est complexe, sans compromis, sans bornes, et de compromis. Bonne chance!


Si je change tout mon matériel, j'ai un nouvel ordinateur.


Mais vous n'avez pas répondu à ma question: de quoi s'agit-il d'un ordinateur qui le rend unique? Si je déplace tous les composants d'un ordinateur (carte mère, lecteurs, etc.) dans une nouvelle boîte, est-ce le même ordinateur?


Je pense qu'il est impossible de proposer un algorithme qui, lorsqu'il est exécuté, fournira toujours le même «ID d'ordinateur» pour le même ordinateur (même en cas de changement de matériel) et ne collide pas avec les identifiants générés sur d'autres ordinateurs. Une alternative appropriée dépend de votre cas d'utilisation particulière, mais il s'agit probablement d'obtenir un identifiant aléatoire (quelque chose comme un numéro de guide ou un numéro unique connu fourni par une autorité centrale), et stocker cet identifiant quelque part sur la machine que vous souhaitez identifier ultérieurement. .


Il suffit d'utiliser l'adresse MAC et d'être effectuée avec elle


@Cerception en fait une idée assez terrible: une machine peut avoir plusieurs IP, dont certaines sont associées à une interface qui n'a même pas d'adresse MAC (telle que l'interface de bouclage). Vous pourrez peut-être cuisiner quelque chose de ce type d'œuvres basé sur les adresses MAC OM de ces interfaces qui les ont, mais simplement «à l'aide de l'adresse MAC et d'être effectuées avec elle» ne fonctionnera pas.


Comme @chrisgerken dit, vous devez définir ce qui constitue "cet" ordinateur, qui est un concept glissant. Dans certaines circonstances, vous pourriez penser que c'est l'enceinte - "Cette boîte" - mais dans d'autres circonstances, vous pourriez penser que c'est la combinaison spécifique de composants - "Cette carte NetWord, cette carte mère, ces banques de RAM, etc.". Beaucoup d'entre nous améliorent lentement nos composants au fil des ans et lorsqu'un système de DRM ou de licences décide soudainement, nous avons un "nouvel ordinateur", il est légitimement induré.


@Arnoutengelen - N'ayons pas d'enfant ici, je doute que l'OP a besoin de quelque chose de plus «robuste» qu'un identifiant distinctif unique par ordinateur. Pensant que vous pouvez obtenir quelque chose de plus robuste et fiable que c'est un rêve.


3 Réponses :


4
votes

Je pense vraiment que vous devriez utiliser quelque chose à partir de profil matériel. de
Un ordinateur peut être considéré comme un ensemble de pièces de matériel, y compris l'interface réseau. Un motif typique peut être d'une combinaison d'une adresse MAC et d'un identifiant généré par un système de gestion gère des ordinateurs sur le réseau. de
L'adresse MAC pour identifier uniquement la machine lors d'un processus d'enregistrement au système de gestion. de
À la suite de l'enregistrement, le système de gestion peut retourner un produit unique généré,
être stocké sur l'ordinateur qui vous est inscrit et sera utilisé ultérieurement. de
Après une inscription réussie, vous pouvez remplacer la carte d'interface réseau, car l'ordinateur ne dépend pas de l'adresse MAC à identifier. de
Vous pouvez également envisager d'utiliser l'utilitaire de DmiCode Linux
(pour les machines Linux,
lorsque vous avez fourni une solution à base de gains,
pour nos lecteurs Linux,
Je tiens à suggérer une alternativité Linux) (Si la machine que vous souhaitez identifier de manière unique, est installé Linux et Dmidecoe). de
Utilisation de DmiDecoe Vous pouvez obtenir plus de profil matériel et effectuer une fonction de hachage dessus et générer une carte d'identité unique qui identifiera de manière unique (avec une probabilité élevée, d'être précise) de votre machine. de
En savoir plus sur DmiDecode ici . de
Bien sûr, au cas où vous allez avoir «obtenir des informations sur le matériel de l'approche du système d'exploitation» (qui est DMidecode ou ce que vous avez suggéré à la pièce après avoir obtenu l'adresse MAC,
Vous avez besoin d'un code de plate-forme croisé pour vérifier quel est le programme d'exploitation Le programme Java s'exécute, vous faites cela en utilisant ce:

System.getProperty("os.name");


1 commentaires

Le concept de disposer d'un système de gestion central fournissant des identifiants uniques et de stocker cet ID sur la machine client est solide. Cependant, l'affiche n'a pas expliqué son étui à utiliser suffisamment de détails pour déterminer si cette solution s'applique dans son cas. Je ne vois pas pourquoi vous utiliseriez des adresses MAC ou d'autres propriétés matérielles de la machine client dans ce scénario du tout.



1
votes

Après avoir regardé l'entrée de chacun, et assez de recherches de Google, je suis arrivé à cette conclusion

en technique, voir comme si vous supprimiez un composant et le remplacé, il s'agirait d'un ordinateur entièrement nouveau, de générer un identifiant spécifique de l'ordinateur VRAI que vous devriez obtenir une variable spécifique de chaque composant du système (c'est-à-dire que le Numéro de série), combinez-les tous, et ce serait un «ID spécifique à l'ordinateur». Cependant, étant donné qu'un ordinateur est tellement susceptible de changer, le plus proche obtiendrait est de prendre le moins de susceptible de changer de composant et de nous une variable spécifique de celui-ci pour l'ID d'ordinateur. Ce sera généralement la carte mère ou une autre composante qui n'est pas susceptible de changer. Donc, le plus proche pourrait être le numéro de série (ou un autre composant enfant) de la carte mère. Dans mon opinion personnelle.

Pourquoi la carte mère est-elle la moins susceptible de changer?

Il semble que la carte mère soit la dernière partie des gens envisagent de changer, en particulier sur les ordinateurs plus récents. Ils ne le changeront pas normalement à moins que cela ne soit absolument nécessaire. Une autre option viable serait la carte réseau. C'est honnêtement à vous de vous sur quelle pièce de matériel que vous utilisez, mais le meilleur à utiliser serait celui que vous pensez être le moins susceptible de changer.


0 commentaires

1
votes

Pour disque / volumes, il pourrait être:

    /**
     * Execute system console command 'vol' and retrieve volume serial number
     *
     * @param driveLetter - drive letter in convetion 'X:'
     * @return - Volume Serial Number, typically: 'XXXX-XXXX'
     * @throws IOException
     * @throws InterruptedException
     */
    static final String getVolumeSerial(String driveLetter) throws IOException, InterruptedException {
        Process process = Runtime.getRuntime().exec("cmd /C vol " + driveLetter);
        InputStream inputStream = process.getInputStream();
        InputStream errorStream = process.getErrorStream();
        if (process.waitFor() != 0) {
            Scanner sce = new Scanner(errorStream);
            throw new RuntimeException(sce.findWithinHorizon(".*", 0));
        }
        Scanner scn = new Scanner(inputStream);
        // looking for: ': XXXX-XXXX' using regex
        String res = scn.findWithinHorizon(": \\w+-\\w+", 0);
        return res.substring(2).toUpperCase().trim();
    }


2 commentaires

Bonjour, désolé si cette question semble naïve, mais c'est la réponse est pour Windows uniquement, correct?


Oui, malheureusement seulement Windows.