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