1

我正在尝试将 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!
    }
}
4

3 回答 3

6

了解您尝试做的事情。类似于将您的电话号码翻译成街道名称 - 它们之间没有关联。

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

于 2012-01-19T15:21:31.240 回答
4

看看这里

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));
于 2012-01-19T15:19:53.990 回答
3

实际上 MAC 地址是给你的。您不需要知道计算机的 MAC 地址。macAddr 将在您调用函数 SendARP 后保存 MAC 地址。

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

地址解析协议的全部意义在于您可以将网络层地址 (IP) 解析为物理地址 (MAC)

于 2012-01-19T15:20:59.050 回答