2010-06-29 5 views
1

У меня есть ситуация, когда я пингует ряд IP-адресов в сети. Затем я пытаюсь подключиться к успешным пинам.Как получить MAC-адрес до подключения?

Моя цель - подключиться к конкретному оборудованию с определенным префиксом MAC. Например, когда я ping диапазон из 100 IP, я могу получить 20 ответов. Эти ответы включают компьютеры, принтеры и, возможно, аппаратное обеспечение, которое я пытаюсь подключить.

В настоящее время происходит то, что когда я пытаюсь подключиться к чему-либо, кроме оборудования, которое мне бы хотелось (например, к компьютеру, принтеру), я получаю соединение с таймаутом.

Это прекрасно, но это не эффективно. Я хотел бы отфильтровать успешный список ping, используя MAC-адрес, однако мне еще не удалось найти решение, которое позволяет мне искать MAC-адрес до подключения оборудования.

Я рассмотрел большинство вопросов MAC здесь, но ни один из них не соответствует моим потребностям.

Любые идеи?

+1

возможно дубликат [Как получить доступ к ARP-протокола информации через .NET?] (HTTP: //stackoverflow.com/questions/1148778/how-do-i-access-arp-protocol-information-through-net) – tvanfosson

+0

Я попробовал решение там, однако это возвращает только то, что возвращает «arp -a» в командной строке , Это не подходит для меня, потому что таблица arp содержит только MAC-адреса IP-адресов, к которым подключен компьютер. – sbenderli

ответ

3

Я был в состоянии найти решение здесь: http://pinvoke.net/default.aspx/iphlpapi/SendARP.html

Следующий метод возвращает 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)); 
    }