Как преобразовать IP-адрес в байтовый массив MAC-адреса? - PullRequest
1 голос
/ 19 января 2012

Я пытаюсь преобразовать IP-адрес в MAC-адрес, а затем преобразовать его в байтовый массив.Я застрял в первой части и не уверен, как это сделать.Я видел некоторые результаты поиска, говорящие о System.Net.NetworkInformation.NetworkInterface, но не уверен, как его использовать.

Это мой код, которому нужен байтовый массив MAC.Как это сделать?

[DllImport("iphlpapi.dll", ExactSpelling = true)]
public static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);

private void Ping(IPAddress address)
{
    byte[] macAddr = new byte[6];
    uint macAddrLen = uint.Parse(macAddr.Length.ToString());

    if (SendARP(int.Parse(address.ToString()), 0, macAddr, ref macAddrLen) == 0)
    {
        //SUCCESS!
    }
}

Ответы [ 3 ]

6 голосов
/ 19 января 2012

Узнайте о том, что вы пытаетесь сделать.Исакин переводит ваш номер телефона в название улицы - между ними НЕТ корреляции.

MAC-адрес закодирован в драйвере уровня Ethernet, в то время как IP-адрес является искусственной конструкцией, более высокой по IPпротокол.У них Ноль отношений.Маршрутизаторы находят MAC-адреса для отправки IP-пакетов по протоколу (ARP - Address Resolution Protocol), и это не может пересекать сегменты сети.

4 голосов
/ 19 января 2012

Посмотрите здесь :

byte[] macAddr = new byte[6];
uint macAddrLen = (uint) macAddr.Length;
if (SendARP((int)address.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");

Console.WriteLine(string.Join(":", str));
3 голосов
/ 19 января 2012

На самом деле вам дан MAC-адрес. Вам не нужно знать, какой MAC-адрес у компьютера. macAddr будет хранить MAC-адрес после того, как вы вызвали функцию SendARP.

В документации MSDN вы можете видеть, что параметры macAddr и macAddrLen помечены как [out], что означает, что функция использует эти аргументы, чтобы вернуть вам значение.

Смысл протокола разрешения адресов в том, что вы можете преобразовывать адреса сетевого уровня (IP) в физические адреса (MAC)

...