Comment faire pour obtenir (presque) unique identifiant du système dans une plate-forme de chemin?
Je suis à la recherche d'un moyen d'obtenir un certain nombre qui sera presque sûrement changer lors de l'exécution du code sur des machines différentes et presque certainement rester le même entre les deux s'exécute sur la même machine.
Si je faisais ça comme un script shell sous Linux, je voudrais utiliser quelque chose comme ceci:
{ uname -n ; cat /proc/meminfo | head -n1 ; cat /proc/cpuinfo ; } | md5sum
Mais j'ai besoin de ce C++ (avec boost) et au moins sur Windows, Linux et Mac.
- Il ya une très bonne chance que ne vous donnera pas des résultats cohérents sur la même machine; la plupart des Processeurs modernes ont dynamique de la fréquence de mise à l'échelle, et /proc/cpuinfo reflète la fréquence instantanée!
- une double
- Cela ressemble le programme va être mis en réseau (sinon, un ID de sons inutiles). Dans ce cas, vous pourriez être mieux si vous obtenez un ID unique à partir du serveur de votre programme se connecte à et de les stocker localement à des fins d'utilisation ultérieure.
- Charlesworth: Bien, c'est juste un détail, j'ai toujours pu grep seulement la non-évolution des champs.
- C.: en Fait, j'ai besoin sur le serveur que l'application a été copié (y compris l'ensemble de ses fichiers), donc cela ne marcherait pas... mais c'est une bonne idée de toute façon 🙂
- Il peut être aussi facile que de trouver le chemin où le fichier exécutable se trouve. Si que de changements depuis la dernière fois, alors vous savez qu'il a été copié. VMWare Workstation fait que, par exemple, et demande à l'utilisateur "avez-vous copie ce ou avez-vous vous déplacer?" Si déplacé, l'ID est conservé. Si copiés, un nouvel IDENTIFIANT est créé.
- Que penser de l'utilisation de l'adresse mac de la zone locale? Vous devriez écrire le code indépendant de plate-forme pour le chercher, mais il ne serait que de quelques lignes.
Vous devez vous connecter pour publier un commentaire.
Pour générer un la plupart du temps unique de la machine id, vous pouvez obtenir quelques-uns des numéros de série à partir de diverses pièces de matériel sur le système. La plupart des processeurs ont un numéro de série du CPU, les disques durs ont chacun un certain nombre, et chaque carte réseau ont une adresse MAC unique.
Vous pouvez obtenir ces et de construire une empreinte pour la machine. Vous souhaitez que certains de ces numéros de changer avant de déclarer une nouvelle machine. ( par exemple, si les 2 sur les trois sont les mêmes, alors la machine est le même ). De sorte que vous pouvez traiter un peu gracieusement d'avoir un composant mis à jour.
J'ai tondu un peu de code à partir d'un de mes projets qui obtient ces chiffres.
Windows:
Linux et OsX:
Je sais, la question est un peu trop vieux pour être répondu. Mais j'ai à de nombreuses reprises face à ce problème. J'aime l'accepter solution, mais si vous avez essayé le code, alors vous saurez qu'il a des problèmes.
tout d'abord le CPU id est l'ID de produit - elle n'est pas la série. Donc si vous avez le même PROCESSEUR à un autre Serveur, alors il est tout simplement pas aller travailler. aussi l'Adresse MAC peut être changé avec la facilité.
Si vous essayez seulement de faire ça sous Linux, vous pouvez essayer comme hal services. ie.
Mais la meilleure chose probablement à faire est si vous pouvez appliquer l'accès root et si vous voulez obtenir vos mains sales - est de regarder le code pour dmidecode. Il va vous permettre de extraire l'UUID de Châssis, d'un Bios, de la Vidéo et du Système. Vous ne pouvez pas battre 🙂 et avec un peu de peaufinage, vous pouvez le convertir à une classe.
Peut-être vous pouvez générer près de id unique de l'unique id de matériel -
MAC est universellement unique, vous pouvez également utiliser modèle de processeur
À mon avis, vous devriez choisir uniquement les choses qui ne peuvent pas être changés fréquemment comme le cpu ou LAN/WLAN cartes.
GetAdaptersInfo
sur Windows le fait ou pas. Beaucoup de fonctions de Windows ignorer complètement désactivé réseau périphériques, et qui pourrait être un problème pour les utilisateurs mobiles.Un portable solution serait d'utiliser des temps de modification d'un fichier exécutable.
stat
fonction est disponible sur les systèmes unix et windows, bien que l'API est différent de sorte que vous devez utiliser certainesIFDEFs
.Binaire est peu probable à être déployé à exactement le même temps à différentes machines, de sorte que l'id doit être unique. L'inconvénient est que la mise à jour binaire va changer les id.