Qu'est-ce qu'un bon identifiant unique de PC?

j'ai regardé le code dans ce tutoriel , et j'ai trouvé qu'il utilise My.Computer.Name pour enregistrer des paramètres qui ne devraient pas errer entre les ordinateurs. Il est tout à fait possible, cependant, pour un utilisateur d'avoir deux PC identiques nommés. S'ils voulaient avoir le même nom d'utilisateur sur chaque PC, par exemple, ils pourraient très bien se retrouver avec deux PC nommés Username-PC.

Quelles sont les bonnes méthodes d'identification des différents Pc? Ne Pc ont Guid associé à eux, ou devrais-je regarder en tirant le numéro de série de certains matériels? Je ne me soucie pas si l'identification persiste par la réinstallation de Windows.

(le tutoriel que j'ai relié est en VB.Net, but i'm implementing it in C#)

38
demandé sur dlras2 2010-08-09 22:41:04

10 réponses

quelques bons identificateurs:

  • adresse MAC: c'est assez facile à obtenir, et il est généralement unique. Cependant, il peut être falsifié/changé assez facilement, de sorte qu'il dépend de la façon dont il doit être unique.
  • CPU numéro de série: il n'est pas disponible sur beaucoup de systèmes plus anciens, mais il est là. Cochez cette page MSDN . Ça ne changera pas, mais c'est relié à un ordinateur.
  • HDD Numéro de série: il est probable pour ne pas changer, mais peut être une nuisance si le HD échoue. Cochez cette page MSDN .
37
répondu mattbasta 2010-08-09 18:46:33

si vous êtes sur windows HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProductId est unique par machine/par Windows install. où comme dans certaines des autres réponses comme L'adresse MAC, Proc SN, et HD SN restera le même entre les réinstallations de windows/situations de botte double.

16
répondu Scott Chamberlain 2010-08-09 18:51:18

la vraie réponse à cette question: il n'y a pas de telle chose.

il y a plusieurs solutions "assez proches", mais chacune a ses propres limites.

toutes les modifications matérielles. Et, dans de nombreux cas, vous pouvez changer ces identificateurs (par exemple, mystification MAC).

le SID, comme je l'ai déjà commenté, n'est pas aussi bon, parce que le SID ne changera pas si l'ordinateur a été installé à partir d'un image. Le SID est généré par l'installation de windows, si windows n'a pas été installé, mais copié à partir d'une image, le SID ne changera pas (bien qu'il soit courant de le régénérer en raison d'un mythe sur le "risque de sécurité" - vous ne pouvez pas compter sur cela).

nom de L'ordinateur-Eh bien, comme mentionné, ils supposent être unique, mais il n'est pas appliqué en aucune façon.

une autre solution que vous pouvez mettre en œuvre est de générer votre propre identifiant unique et conservez-le Localement (en présumant que vous pouvez le faire). Encore une fois, cette solution ne fonctionnera pas si votre ordinateur a été imagé avec votre application.

La meilleure solution pour vous dépend vraiment de ce que vous essayez d'accomplir. J'ai eu le même problème avec un très grand réseau, et la meilleure solution dans mon cas, c'était le nom de l'ordinateur. Si vous êtes absolument sûr que votre processus ne sera pas imagé, Je générerais un identifiant unique en utilisant Guid car il sera probablement le plus sûr.

11
répondu DiGMi 2012-09-22 17:29:07
pour chaque disque physique. Dans ce cas, le

    foreach (ManagementObject item in searcher.Get())

devrait trouver des articles multiples""

9
répondu andrewmcc 2013-03-05 16:07:57

utilisez L'adresse MAC de la carte réseau. C'est censé être unique. Il peut être changé, cependant. Cela dépend à quel point vous vous attendez à ce que vos utilisateurs soient malveillants et à quel point votre application est critique.

un exemple de code pour le faire:

public string GetMACAddress() {
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();

    string MACAddress = String.Empty;

    foreach (ManagementObject mo in moc) {
        if (MACAddress == String.Empty) { // only return MAC Address from first card
            if ((bool)mo["IPEnabled"] == true) MACAddress = mo["MacAddress"].ToString();
        }
        mo.Dispose();
    }

    return MACAddress;
}
2
répondu MicSim 2010-08-09 18:53:09

prend trois identificateurs semi-uniques et semi-constants. Utilisez la règle que 2 sur 3 est suffisant pour une identification positive. Mettre à jour les données enregistrées pour le 1 sur 3 qui est parfois erroné.

2
répondu Tomminn 2017-09-11 02:52:03

chaque ordinateur a un SID qui est unique dans des circonstances normales.

1
répondu Steven Sudit 2010-08-09 18:46:06

une chose que vous pouvez utiliser est le MAC de n'importe quelle interface réseau. Vous pouvez également combiner plusieurs sources d'information. Comme HDD Numéro de série, mac, type de processeur pour calculer un hash à partir de lui.

1
répondu schoetbi 2010-08-09 18:46:33

Je ne pense pas qu'il soit possible d'avoir deux PC avec le même nom sur le même domaine. Avez-vous essayé de capturer le nom de domaine?

0
répondu user279521 2010-08-09 18:43:48

jetez un oeil ici: obtenir L'étiquette de Service de Dell Machine en utilisant .net?

vous pouvez récupérer des données uniques du registre.

0
répondu JonH 2017-05-23 10:31:13