IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Authentifier une machine


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Authentifier une machine
    Bonjour,

    Pour authentifier une machine, j'ai pensé à plusieurs identifiants :
    - Mac Address : le pb est que la machine doit être connectée
    - le serial du disque dur : le pb est que cette solution n'est pas compatible avec l'utilisation d'un disque dur externe et c'est un organe susceptible d'être remplacé dans la vie d'un ordinateur
    - le ProcessorId

    Pour ce dernier choix, j'ai trouvé en effet le code suivant sur le NEt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Public Function GetProcessorRef() As String
     
            Dim ProcClass As New System.Management.ManagementClass("Win32_Processor")
            Dim Procs As ManagementObjectCollection = ProcClass.GetInstances
            Dim Proc As ManagementObject
            For Each Proc In Procs
                GetProcessorRef = Proc("ProcessorId").ToString
                Exit For
            Next Proc
     
        End Function
    J'ai bien trouvé la doc MSDN sur le ProcessorId ainsi défini :

    Processor information that describes the processor features. For an x86 class CPU, the field format depends on the processor support of the CPUID instruction. If the instruction is supported, the property contains 2 (two) DWORD formatted values. The first is an offset of 08h-0Bh, which is the EAX value that a CPUID instruction returns with input EAX set to 1. The second is an offset of 0Ch-0Fh, which is the EDX value that the instruction returns. Only the first two bytes of the property are significant and contain the contents of the DX register at CPU reset—all others are set to 0 (zero), and the contents are in DWORD format.
    Cette définition est un peu obscure pour moi. Je n'arrive pas à savoir si cette propriété est un identifiant unique pour chaque ordinateur (c'est-à-dire si on A deux valeurs pour 2 ordinateurs identiques équipés du même processeur)

    Quelqu'un en sait-il plus ?
    Et avez-vous une autre suggestion que le ProcessorId si celui-ci n'est pas approprié ?

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Ce que tu cherches à générer se nomme un HWID (HardWare Identifier) et il me semble qu'il est unique.

    Si tu as des doutes tu peux le coupler avec :

    - le MotherBoardID.


    A+

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Entre temps, je me suis rappelé que j'avais 2 vieux ordinateurs identiques dans un placard. J'ai testé mon application successivement sur les 2 et ils renvoient la même valeur avec la fonction précédemment citée.

    Je vais essayer avec la carte mère ID mais je crains que ce soit le même pb : cela renvoie un numéro propre au composant mais 2 ordi équipés du même composant vont renvoyer la même valeur.
    Le fait de coupler cette valeur avec le processorID ne changera rien : 2 ordi identiques vont renvoyer la même valeur.

    Je crains qu'il ne faille trouver autre chose

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Tu ne pourras pas echapper a ce probleme en te basant sur des id materiels :

    - l'utilisateur risque de changer 1 ou des composant(s)

    Il te faudra tout simplement l'accepter !

    Donc il faut que tu te bases sur la recup des numeros de serie qui eux sont uniques.


    A+

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Tu ne pourras pas echapper a ce probleme en te basant sur des id materiels :

    - l'utilisateur risque de changer 1 ou des composant(s)

    Il te faudra tout simplement l'accepter !
    Ce n'est pas la question. J'ai bien compris et accepté ce risque. On peut le minimiser en choisissant de se baser sur un composant que l'on ne change pas souvent pour ne pas dire jamais (la carte mère est un bon exemple)

    La solution est apportée par ton propos suivant :

    Donc il faut que tu te bases sur la recup des numeros de serie qui eux sont uniques.
    Mais justement, comment récupérer un numéro de série et non un identifiant de gamme de composant ?

    Les pistes évoquées plus haut permettent de récupérer le nom de la gamme du composant (sous forme d'un nombre appelé ID)

    Tous les ordinateurs d'une même gamme renverront donc le même ID.

    En revanche, la notion de numéro de série va plus loin. Si l'on prend l'exemple de la carte-mère, chaque carte-mère en tant qu'objet physique a un numéro de série différent.

    La question est donc :
    - un composant type carte-mère a-t-il bien un numéro de série au sens de la définition précédente ?
    - comment récupérer ce numéro de série en VB.NET ?

    Je reviens également sur l'adresse MAC. En début de topic, je disais écarter cette solution car il faut être connecté pour l'obtenir. C'est en partie faux, je m'en suis rendu compte hier en faisant des recherches. L'adresse MAC est en effet un numéro fixe, propre à chaque ordinateur (en tant qu'objet physique) mais la fonction dont j'ai donné le code ne permet de récupérer ce numéro que lorsque l'ordinateur est connecté à internet. Je suis donc en train de cherche une méthode pour récupérer en VB.NET l'adresse mac indépendamment de toute connexion. Ce doti être possible puisque la commande ipconfig/all permet d'obtenir ce numéro avec ou sans connexion internet. J'ai trouvé un topic qui en parle mais la solution est sous forme de fichier Delphi que je ne peux pas lire. J'ai posté un message sur ce topic pour au moins avoir le code en format texte : http://www.developpez.net/forums/d84...u-deconnectee/
    Ce serait une solution également.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code en C# pour récupérer l'adresse mac :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public static string GetMacAdress()
        {
          string Result="" ;
          if (System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces().Count()>0)
            Result=BitConverter.ToString(System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].
               GetPhysicalAddress().GetAddressBytes());
          return Result ;
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser une machine a distance
    Par baert dans le forum Réseau
    Réponses: 6
    Dernier message: 09/04/2004, 08h42
  2. Adresse publique d'une machine du L.A.N. ?
    Par WOLO Laurent dans le forum Développement
    Réponses: 4
    Dernier message: 30/11/2003, 15h19
  3. Comment récupérer la liste des logiciels installés sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 19/09/2003, 17h41
  4. [Débutant] Connexion sur une machine distante protégée
    Par arthix dans le forum Développement
    Réponses: 3
    Dernier message: 28/08/2003, 09h46
  5. Réponses: 4
    Dernier message: 10/09/2002, 17h09

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