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

Développement Discussion :

Comment récupérer une adresse MAC ?


Sujet :

Développement

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 61
    Points : 48
    Points
    48
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 14
    Points : 30
    Points
    30
    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 averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 14
    Points : 30
    Points
    30
    Par défaut Forcément si c'est sous Windows...
    ...ça facilite les choses

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 61
    Points : 48
    Points
    48
    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 averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    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
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 61
    Points : 48
    Points
    48
    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
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 61
    Points : 48
    Points
    48
    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.

Discussions similaires

  1. Comment obtenir une adresse mac sur python
    Par Wael Maaoui dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 19/02/2007, 14h52
  2. Récupérer une adresse MAC sur l'entrée standard
    Par the_ionic dans le forum Réseau
    Réponses: 14
    Dernier message: 20/07/2006, 10h56
  3. récupérer une adresse mac d'un pc distant
    Par Mut dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 03/02/2006, 12h01
  4. [HTTP] Comment récupérer l'adresse de base d'une URL ?
    Par eric30eric dans le forum Web & réseau
    Réponses: 2
    Dernier message: 02/10/2005, 18h28
  5. Réponses: 5
    Dernier message: 25/03/2003, 18h27

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