首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中同一局域网上的MAC地址到IP地址

C#中同一局域网上的MAC地址到IP地址
EN

Stack Overflow用户
提问于 2010-02-05 08:40:51
回答 2查看 6.1K关注 0票数 2

有没有办法在C#中找到MAC地址到IP地址的映射?我认为RARP应该能够做到这一点,在C#中有可用的API来实现这一点吗

EN

回答 2

Stack Overflow用户

发布于 2018-03-15 21:33:25

您可以使用这个类

代码语言:javascript
复制
internal class IPAndMac
{
    public string IP { get; set; }
    public string MAC { get; set; }
}

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();
        return list.SingleOrDefault(x => x.MAC.ToLower() == macAddress.ToLower()).IP;
    }

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

并将其用作

代码语言:javascript
复制
var ipAddress = IPMacMapper.FindIPFromMacAddress("mac-address");
var macAddress = IPMacMapper.FindMacFromIPAddress("ip-address");
票数 1
EN

Stack Overflow用户

发布于 2010-02-05 13:11:49

如果您正在寻找一种基于API的方法,但不能执行Process.Start(),请看下面的内容:

http://www.codeproject.com/KB/IP/host_info_within_network.aspx

它允许主机名、IP地址和MAC地址之间的映射。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2204318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档