如何将IP地址转换为MAC地址字节数组?

时间:2012-01-19 15:12:55

标签: c# winforms bytearray mac-address arp

我正在尝试将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 个答案:

答案 0 :(得分:6)

了解您尝试做的事情。将您的电话号码翻译成街道名称是不对的 - 它们之间没有相关性。

MAC地址在以太网级别驱动程序中编码,而IP地址是IP协议上方的人工构造。太棒了ZERo的关系。路由器找到通过协议(ARP - 地址解析协议)发送IP数据包的MAC地址,这不能跨网段。

答案 1 :(得分:4)

看看here

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));

答案 2 :(得分:3)

实际上MAC地址是给你的。您无需知道计算机具有的MAC地址。在调用SendARP函数后,macAddr将保留MAC地址。

MSDN documentation中,您可以看到参数macAddr和macAddrLen被标记为[out],这意味着该函数使用此参数为您提供值。

Address Resolution Protocol的重点是您可以将网络层地址(IP)解析为物理地址(MAC)