网络工具类(一) 获取内网所有IP

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




猜你喜欢

转载自blog.csdn.net/qq_28254093/article/details/79825391
今日推荐