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