从c#中的Mac地址中获取IP

本文关键字:获取 IP 地址 Mac 中的 | 更新日期: 2023-09-27 18:03:23

是否有任何方法可以获得与特定MAC地址对应的IP(或主机名)?

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

从c#中的Mac地址中获取IP

你可以使用这个类

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

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

下面是c#

的示例