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

C++Builder Discussion :

Trouver adresse MAC en connaisant adresse IP


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut Trouver adresse MAC en connaisant adresse IP
    Bonjour,

    je souhaite récupérer l'adresse MAC d'un hôte distant en connaisant son adresse IP sans utiliser DOS ou des codes à ralonge.
    Quelqu'un aurait une solution à mon pb?

    Merci

  2. #2
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Voici ce qu'on peut faire, par exemple, en utilisant IPHLPAPI.DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #pragma link "C:\\Program Files\\Borland\\CBuilder5\\Lib\\PSDK\\iphlpapi.lib" // il s'agit ici bien sûr de Builder 5
    ......
    ......
    AnsiString __fastcall TForm1::GetMAC(DWORD ipAddr)
    {
    ULONG   pulMac[2];
    ULONG   ulLen;
    AnsiString AsMAC = "00:00:00:00:00:00";
      memset (pulMac, 0xff, sizeof (pulMac));
      ulLen = 6;
      if (SendARP (ipAddr, 0, pulMac, &ulLen)) // erreur
        return "00:00:00:00:00:00";
      size_t i, j;
      char *szMac = new char[ulLen * 3];
      PBYTE pbHexMac = (PBYTE) pulMac;
      for (i = 0, j = 0; i < ulLen - 1; ++i)
        j += wsprintf (szMac + j, "%02X:", pbHexMac[i]);
      wsprintf (szMac + j, "%02X", pbHexMac[i]);
      AsMAC.sprintf("%s", szMac);
      delete [] szMac;
      return AsMAC;
    }
    La fonction SendARP de iphlpapi est invoquée avec en paramètre l'adresse IP dont on veut connaître l'adresse MAC. Puis on convertit le résultat se trouvant dans pulMac en une adresse lisible et on retourne une AnsiString.

  3. #3
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    J'ai omis de préciser que l'adresse IP attendue en paramètre de TForm1::GetMAC étant un DWORD et nom une adresse de type chaine de caractères, je fournis ci-dessous une fonction pour convertir convenablement cette adresse par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DWORD aIP = IPStrToInt(Edit1->Text);
    AnsiString StrMAC = GetMAC(aIP);
    afin d'utiliser aIP dans l'appel à GetMAC. Voici la fonction IPStrToInt() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // CONVERTIR @IP CHAINE EN ADRESSE IP DWORD
    // Sait gérer des adresses sous la forme 192.168.001.021
    DWORD __fastcall TForm1::IPStrToInt(AnsiString As)
    {
    char szChaine[16], *szCn[4];
    int LgrChaine, i, j;
     
      strcpy(szChaine, As.c_str());
      if ((LgrChaine = strlen(szChaine)) > 15)
        return 0;
      for (i=1 ; i<4 ; i++)
        szCn[i] = szChaine + LgrChaine; // chaine vide
      szCn[0] = szChaine;
      for (i = 0 , j = 1 ; szChaine[i] != 0 && j < 4 ; i++)
      {
        if (szChaine[i] == '.')
        {
          szChaine[i] = '\0';
          szCn[j++] = szChaine + i + 1;
        }
      }
      for (i=0 ; i<4 ; i++)
        if (StrToInt(szCn[i]) > 255)
        {
          Beep();
          ShowMessage("Adresse invalide");
          return 0;
        }
      return StrToInt(szCn[0]) + (StrToInt(szCn[1])<<8) + (StrToInt(szCn[2])<<16) + (StrToInt(szCn[3])<<24);
    }

  4. #4
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Merci de ton aide mais je n'arrive pas à inclure la dll au projet. Il ne connait pas la fonction SendARP.

    Merci de ta réponse

  5. #5
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    J'ai réussi a inclure la dll car j'avais oublié de mettre l'entête .h
    Ton prog marche et c'est super merci beaucoup. Par contre je ne comprend pas à quoi sert la variable "szCn" dans ta fonction GetMAC, tu ranges quoi à l'intérieur?

    for (i=1 ; i<4 ; i++)
    szCn[i] = szChaine + LgrChaine;
    szCn[0] = szChaine;


    Merci de ta réponse

  6. #6
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    szCn est un tableau de 4 chaines de caractères dans lesquelles vont être stockées chacune des 4 chaines représentant les sous-chaines de l'adresse IP sous forme alpha.
    Par exemple, dans l'adresse 192.168.123.234, szCn[0] pointe sur "192", szCn[1] pointe sur "168", szCn[2] pointe sur "123", szCn[3] pointe sur "234".

    Il est ensuite aisé d'utiliser ces 4 chaines que l'on convertit en valeurs numériques dans le return de fin.

  7. #7
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Et pourquoi tu rajoute LgrChaine à szCn? Ca sert a quoi?

    Tu peu m'éclairer sur la fonction GetMAc que tu as fais. Comment elle fonctionne ?

    Merci

  8. #8
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par Général03
    Et pourquoi tu rajoute LgrChaine à szCn? Ca sert a quoi?
    Je ne m'en souviens plus ! Si ça me revient, je t'en ferai part.
    Citation Envoyé par Général03
    Tu peu m'éclairer sur la fonction GetMAc que tu as fais. Comment elle fonctionne ?
    Elle répond précisément à ta question initiale : "je souhaite récupérer l'adresse MAC d'un hôte distant en connaissant son adresse IP " Sauf que l'adresse IP à fournir à GetMAC l'est sous la forme binaire (DWORD).

  9. #9
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Merci de me répondre quand tu as plus d'infos.

    Merci beaucoup car ta fonction tourne super par contre certaines fois je n'obtiens rien (00:00:00...)

  10. #10
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par Général03
    certaines fois je n'obtiens rien (00:00:00...)
    Peut être parce que tu ping une adresse sur un autre réseau et là, on ne risque pas de récupérer l'adresse MAC.

  11. #11
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Il existe pas une solution pour la connaitre?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    J'ai impérativement besoin de ce programme. Mais je n'ai pas le temps de le réaliser. Serait-il possible de me l'envoyer par e-mail ? Veuillez me demander mon e-mail par mp !! Svp c'est urgent !

  13. #13
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    OK je te l'ai envoyer par mail et dsl je croyai que tu n'avais pas poser de post...

    Le souci est que tu n'obtiens rien qd tu passe un routeur...si t'as une solution pr y remedié

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    J'ai créer ce programme avec le même code exactement, mais maintenant, où est-ce que je peux lui donner l'adresse IP et par où je reçois l'adresse MAC ?

  15. #15
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Utilise d'abord la fct IPStrToInt en placant ton @IP en AnsiString en paramètre et il te retourne cette derniere en DWORD.

    Après tu utilises la fonction GetMAC ou tu rentres ton adresse IP (variable DWORD) ds son paramètre. Enfin il te retourne l'adresse magique....

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Salut,

    Pour appeler les fonctiones j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //-------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       IPStrToInt("xxx.xxx.xxx.xxx");
       GetMAC(???);
    }
    //---------------------------------------------------------------------------
    Pour la première fonction cela fonctionne, mais je sais pas comment mettre la valeur DWORD retournée par la première fonction dans le parametre de la deuxième. J'ai essayé de mettre "szCn" c'est ce qui est retourné par la première mais cela ne fonctionne pas. Je dois y mettre quoi ?

    Merci

  17. #17
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    DWORD aIP = IPStrToInt (192.168.0.15);
    AnsiString StrMAC = GetMAC(aIP);
    La variable StrMAC retourne ton adresse physique

  18. #18
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par Général03
    Le souci est que tu n'obtiens rien qd tu passe un routeur...si t'as une solution pr y remedié
    Evidemment, la seule adresse MAC que tu pourras connaître est... celle de ton routeur ! Et ça, tu ne pourras jamais dépasser cette contrainte, à moins de construire une appli client/serveur avec un service tournant sur le poste distant.

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

Discussions similaires

  1. Récupérer l'adresse MAC depuis l'adresse IP
    Par dedibox26 dans le forum Réseau
    Réponses: 1
    Dernier message: 17/05/2010, 17h19
  2. Obtenir l'adresse Mac depuis l'adresse IP
    Par djibril dans le forum Réseau
    Réponses: 4
    Dernier message: 04/02/2010, 17h21
  3. Obtenir l'adresse ip d'une adresse mac?
    Par Katyucha dans le forum Réseau
    Réponses: 5
    Dernier message: 07/05/2008, 14h30
  4. [Ubuntu] avoir l'adresse MAC avec l'adresse IP.
    Par cmoibal dans le forum Réseau
    Réponses: 7
    Dernier message: 03/04/2008, 19h21
  5. trouver l'adresse MAC sous Windows 95
    Par seiryujay dans le forum Développement
    Réponses: 4
    Dernier message: 03/05/2004, 13h20

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