2010-06-29 29 views
1

J'ai une situation où je ping une gamme d'IP dans le réseau. Ensuite, j'essaie de me connecter aux pings réussis.Comment obtenir l'adresse MAC avant la connexion?

Mon but est de me connecter à un équipement spécifique qui a un préfixe MAC spécifique. Par exemple, lorsque je fais un ping sur une plage de 100 adresses IP, il se peut que je reçoive 20 réponses. Ces réponses incluent les ordinateurs, les imprimantes et éventuellement le matériel que j'essaie de connecter.

Actuellement, ce qui se passe est que lorsque j'essaie de me connecter à autre chose que le matériel que je voudrais (par exemple, un ordinateur, une imprimante), je reçois une connexion de temporisation.

C'est très bien, cependant, ce n'est pas efficace. Je voudrais filtrer la liste de ping réussie en utilisant l'adresse MAC, cependant, je n'ai pas encore été en mesure de trouver une solution qui me permet de rechercher une adresse MAC avant de connecter le matériel.

J'ai parcouru la plupart des questions MAC ici, mais aucune ne correspond à mes besoins.

Des idées?

+1

double possible de [Comment accéder à l'information protocole ARP par .NET?] (Http: //stackoverflow.com/questions/1148778/how-do-i-access-arp-protocol-information-through-net) – tvanfosson

+0

J'ai essayé la solution là-bas, mais cela ne fait que retourner ce que "arp -a" dans l'invite de commande retourne . Cela ne me convient pas car la table arp contient uniquement les adresses MAC des adresses IP auxquelles le PC est connecté. – sbenderli

Répondre

3

j'ai pu trouver la solution ici: http://pinvoke.net/default.aspx/iphlpapi/SendARP.html

La méthode suivante retourne le MAC

internal static string GetMAC(string ip) 
    { 
     IPAddress dst = IPAddress.Parse(ip); // the destination IP address Note:Can Someone give the code to get the IP address of the server 

     byte[] macAddr = new byte[6]; 
     uint macAddrLen = (uint)macAddr.Length; 
     if (SendARP((int)dst.Address, 0, macAddr, ref macAddrLen) != 0) 
      throw new InvalidOperationException("SendARP failed."); 

     string[] str = new string[(int)macAddrLen]; 
     for (int i = 0; i < macAddrLen; i++) 
      str[i] = macAddr[i].ToString("x2"); 
     return string.Join(":", str); 
     //Console.WriteLine(string.Join(":", str)); 
    }