【问题标题】:Get the IP from Mac Address in C#在 C# 中从 Mac 地址获取 IP
【发布时间】:2013-02-27 18:58:59
【问题描述】:

有什么方法可以获取对应特定 MAC 地址的 IP(或主机名)?

到目前为止,我发现使用System.Net.Dns 从 IP 获取主机名,反之亦然。

【问题讨论】:

标签: c# ip-address mac-address


【解决方案1】:

你可以使用这个类

public class IPMacMapper
{
    private static List<IPAndMac> list;

    private static StreamReader ExecuteCommandLine(String file, String arguments = "")
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = true;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.UseShellExecute = false;
        startInfo.RedirectStandardOutput = true;
        startInfo.FileName = file;
        startInfo.Arguments = arguments;

        Process process = Process.Start(startInfo);

        return process.StandardOutput;
    }

    private static void InitializeGetIPsAndMac()
    {
        if (list != null)
            return;

        var arpStream = ExecuteCommandLine("arp", "-a");
        List<string> result = new List<string>();
        while (!arpStream.EndOfStream)
        {
            var line = arpStream.ReadLine().Trim();
            result.Add(line);
        }

        list = result.Where(x => !string.IsNullOrEmpty(x) && (x.Contains("dynamic") || x.Contains("static")))
            .Select(x =>
            {
                string[] parts = x.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                return new IPAndMac { IP = parts[0].Trim(), MAC = parts[1].Trim() };
            }).ToList();
    }

    public static string FindIPFromMacAddress(string macAddress)
    {
        InitializeGetIPsAndMac();
        IPAndMac item = list.SingleOrDefault(x => x.MAC == macAddress);
        if (item == null)
            return null;
        return item.IP;
    }

    public static string FindMacFromIPAddress(string ip)
    {
        InitializeGetIPsAndMac();
        IPAndMac item = list.SingleOrDefault(x => x.IP == ip);
        if (item == null)
            return null;
        return item.MAC;
    }

    private class IPAndMac
    {
        public string IP { get; set; }
        public string MAC { get; set; }
    }
}

并将其用作

string ipAddress = IPMacMapper.FindIPFromMacAddress("some-mac-address");
string macAddress = IPMacMapper.FindMacFromIPAddress("some-ip-address");

【讨论】:

  • 这个评论会来自空检查吗? SingleOrDefault 可以返回 null,在这种情况下会引发异常。
  • 是的,我认为这个类需要修改,来处理这个异常
  • @markthewizard1234 我修改了处理空引用异常的答案。
【解决方案2】:

您正在寻找的是阅读计算机的ARP 列表。
然后解析它以找到请求的MAC地址... 请注意,arp -a 同时具有 IP 和 MAC,因此您只需匹配请求的。

Here is an example 如何在 C# 中完成

【讨论】:

  • 不,严格来说 ARP 是通过给定 IP 获取 MAC,@Chris 想通过给定 MAC 获取 IP。
  • 只有在 PC 已经与 IP 地址通信并将其解析为 MAC 地址的情况下,才能通过 MAC 地址读取 ARP 缓存以检索 IP 地址。如果没有,缓存将没有任何地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多