1.获取所有内网IP(不包括本机IP)
网上有许多这方面的相关计算方法,比如通过枚举计算,但我个人认为这种方法并不好。好在有cmd的arp-a命令,
原理 调用cmd的arp-a命令 ,然后解析成需要的数据
静态类 LANIpAllTool (public static class LANIpAllTool)
/// <summary> /// 利用CMD命令获取局域网内所有的IP /// </summary> /// <returns></returns> public static string GetAll() { var str = RunCmd("arp -a"); var regex = new Regex( @"\s*(([0-9]{0,3}[.]?){4}\s)\s*(([a-zA-Z0-9]{2}[-]?){6}\s)\s*([\u4e00-\u9fa5]{0,4}\s)", RegexOptions.IgnoreCase); var match = regex.Matches(str); return match.Cast<object>().Aggregate("", (current, ma) => current + ma.ToString()); } /// <summary> /// 执行CMD语句 /// </summary> /// <param name="cmd">要执行的CMD命令</param> public static string RunCmd(string cmd) { var pro = new Process { StartInfo = { CreateNoWindow = true, FileName = "cmd.exe", UseShellExecute = false, RedirectStandardError = true, RedirectStandardInput = true, RedirectStandardOutput = true } }; pro.Start(); pro.StandardInput.WriteLine(cmd); pro.StandardInput.WriteLine("exit"); var outStr = pro.StandardOutput.ReadToEnd(); pro.Close(); return outStr; }
下面的方法是为第一个方法服务的
调用
this.textBox2.Text = LANIpAllTool.RunCmd("arp -a"); this.textBox3.Text= LANIpAllTool.GetAll();
效果
显示结果,一个是未处理 的 数据 ,一个是处理后的数据
具体需要什么结构,可以在进行处理
2.获取本机IP
/// <summary> /// 获取本机IP /// </summary> /// <returns></returns> public static string LocalIp() { var str=RunCmd("ipconfig"); var regex = new Regex(@"\s*IPv4.*[:]\s*(([0-9]{1,3}[.]?){4})",RegexOptions.IgnoreCase); var match = regex.Matches(str); return (from object ma in match select Regex.Replace(ma.ToString(), @"(([.]\s)|\s|[\u4e00-\u9fa5]{0,}|[:]|[a-zA-Z]*[4]?|[IPv4])", "").Replace("IPv4:", "")).FirstOrDefault(); }
注意:其中 如下代码 是调用上面的 RunCmd()方法
var str=RunCmd("ipconfig");