Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Futur Membre du Club
    Inscrit en
    mars 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 61
    Points : 19
    Points
    19

    Par défaut Comment récupérer une adresse MAC ?

    Bonjour,
    J'ai besoin, depuis une application, de vérifier le type de matériel connecté à une adresse IP connue.
    Je n'ai pas de pb pour faire un ping et savoir si l'équipement existe mais je ne trouve pas comment récupérer son adresse MAC pour pouvoir l'identifier.
    Quelqu'un sait-il comment faire (à partir de l'API Windows) ?

    Merci.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : juillet 2002
    Messages : 14
    Points : 16
    Points
    16

    Par défaut Oui...

    Tiens! cette question me rappel l'école

    Je connais deux méthodes :

    - la première est complètement absurde : tu fait un "arp -a" dans une ligne de commande et tu récupères un tableau du type :

    Adresse Internet Adresse physique
    yyy.yyy.yyy.yyy 00-00-00-11-22-33

    Tu parcours le tableau et tu choppe l'adresse "physique" (MAC) associée...

    Problème ? Hé ben! Heu! Ca marche que sur un réseau local! et même, j'irais plus loin en disant que ça ne marche que sur le même segment de réseau, c'est à dire que dès que tu passe un routeur, ou même un pont transparent, tu chopperas l'@ MAC du-dit routeur ou pont en lieu et place de celle du destinnataire...

    Avantage : un appel système, un parcours de tableau et une conditions et c'est gagné!

    - la deuxième est tout aussi simple : il te suffit d'interroger la bonne entry dans la bonne MIB SNMP (je crois que c'est PhysAdress mais...?!) et le tour est joué...

    Avantage : ça marche à tout les coup quand SNMP est actif sur la machine
    Problème : toutes les machines n'ont pas SNMP!

    MORALITE : obtenir l'@ MAC d'une machine à distance n'est jamais assuré à 100%...

    Courage...

  3. #3
    Membre éclairé Avatar de Altau
    Inscrit en
    juillet 2002
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : juillet 2002
    Messages : 284
    Points : 303
    Points
    303

    Par défaut

    A partir d'une application Windows (et un Windows récent), possibilité d'utiliser IPHLPAPI.DLL de Microsoft :
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcesdkr/htm/_wcesdk_iphlpapi_module.asp
    puis la commande SendArp.
    Beaucoup d'autres commandes puissantes disponibles.
    Bon courage.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : juillet 2002
    Messages : 14
    Points : 16
    Points
    16

    Par défaut Forcément si c'est sous Windows...

    ...ça facilite les choses

  5. #5
    Futur Membre du Club
    Inscrit en
    mars 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 61
    Points : 19
    Points
    19

    Par défaut Pbs avec SendArp

    Tout d'abord, merci pour ces informations.
    Malheureusement, ça ne marche pas très bien.

    Dans l'environnement W2000 SP2, la fonction SendArp() de la dll iphlpapi.dll retourne 0 (erreur) et le GetLastError() également.
    Aucune adresse MAC n'est donc retournée.

    Sous dos, le ping, suivi de la commande arp -a sur l'adresse IP questionnée fonctionne correctement.
    Pour info, l'adresse IP 10.20.52.1 est convertie en valeur décimale 169096193 dans le champ IpAddr de la fonction SendArp(). Je suppose que c'est ok.

    Une hypothèse ??

  6. #6
    Membre éclairé Avatar de Altau
    Inscrit en
    juillet 2002
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : juillet 2002
    Messages : 284
    Points : 303
    Points
    303

    Par défaut

    As-tu pensé à inverser les octets du DWORD avant d'appeler la fonction ?
    (X86 est inversé par rapport au format "Réseau")
    Alain

  7. #7
    Futur Membre du Club
    Inscrit en
    mars 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 61
    Points : 19
    Points
    19

    Par défaut Pb avec SendArp (suite)

    Tout juste. L'adresse est bien inversée.

    J'ai trouvé un bout de code qui devrait faire ce que je veux à l'adresse : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tcpip/tcpip_4wz4.asp.

    Comme je n'ai pas le SDK (platform SDK) qui va bien, j'utilise simplement iphlpapi.dll récupéré sur le net.

    Pour l'instant, je ne parviens toujours pas à obtenir une adresse MAC.
    Selon l'adresse IP, soit SendArp() retourne une erreur, soit il retourne NO_ERROR mais la champs de l'adresse MAC supposée reçue est à 0 (??).

    Je poursuis ...

  8. #8
    Futur Membre du Club
    Inscrit en
    mars 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 61
    Points : 19
    Points
    19

    Par défaut SendArp OK

    En utilisant le code mentionné dans le message précédent et en chargeant dynamiquement iphlpapi.dll,
    CA TOURNE.

    Seul restrictions :
    Il faut être sous NTSP6 ou W2000.

    Merci encore pour le coup de main.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •