这篇文章主要介绍了C#获取本地IP的四种方式示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1.第一种方式
采用System.Net.Dns的GetHostAddress的方式,具体请看代码:
/// <summary>
/// 网络不通畅可以获取
/// 不过能获取到具体的IP
/// </summary>
/// <returns></returns>
public static List<IPAddress> GetByGetHostAddresses()
{
try
{
IPAddress[] adds = Dns.GetHostAddresses(Dns.GetHostName());
return adds == null || adds.Length == 0 ? new List<IPAddress>() : adds.ToList<IPAddress>();
}
catch (Exception)
{
return new List<IPAddress>();
}
}
这种方式受到网络的影响,如果没有连接到网络,本地配置的部分IP是获取不到的,我也遇到一种情况是,电脑环境正常,就是获取不到,原因至今还不知道;
2.第二种方式
采用System.Management.ManagementClass来获取,详细请看代码:
/// <summary>
/// 只有网络通畅才能获取
/// </summary>
/// <returns></returns>
public static List<IPAddress> GetByManagementClass()
{
try
{
ManagementClass mClass = new System.Management.ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection managementObjectCollection = mClass.GetInstances();
List<IPAddress> ls = new List<IPAddress>();
foreach (var item in managementObjectCollection)
{
if ((bool)item["IPEnabled"] == true)
{
foreach (var ip in (string[])item["IPAddress"])
{
IPAddress ipout = null;
IPAddress.TryParse(ip, out ipout);
if (ipout != null)
{
ls.Add(ipout);
}
}
}
}
return ls;
}
catch (Exception)
{
return new List<IPAddress>();
}
}
同样的这种方式也受到网络的约束,没有联网的状态下不一定能够获取到IP;
3.第三种方式
我们平时在命令行中输入ipconfig命令同样也是能获取,在程序中启动Ipconfig应用程序,然后解析出来,也是可以获取得到IP,详细请看代码:
public static List<IPAddress> GetByCMD()
{
try
{
Process cmd = new Process();
cmd.StartInfo.FileName = "ipconfig.exe";
cmd.StartInfo.Arguments = "/all";
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.Start();
string info = "";
List<IPAddress> ls = new List<IPAddress>();
// info = cmd.StandardOutput.ReadToEnd();
Regex validipregex = new Regex(@"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}");
//new Regex(@"^(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$");
while ((info = cmd.StandardOutput.ReadLine()) != null)
{
IPAddress ip = null;
Console.WriteLine(info);
info = validipregex.Match(info).Value;
IPAddress.TryParse(info, out ip);
if (ip != null)
{
ls.Add(ip);
}
}
cmd.WaitForExit();
cmd.Close();
return ls;
}
catch (Exception)
{
return new List<IPAddress>();
}
}
即便是通过这种方式来获取IP,如果在本机电脑没有联网的状态下,也是获取不到IP的,并且也不太建议使用这种方式;
4.第四种方法
采用NetworkInterface.GetAllNetworkInterfaces的方式是不受网络的影响的,联网或者不联网都能够获取到IP,详细请看代码:
/// <summary>
/// 无论网络通不通都能获取到Ip
/// </summary>
/// <returns></returns>
public static List<IPAddress> GetByNetworkInterface()
{
try
{
NetworkInterface[] intf = NetworkInterface.GetAllNetworkInterfaces();
List<IPAddress> ls = new List<IPAddress>();
foreach (var item in intf)
{
IPInterfaceProperties adapterPropertis = item.GetIPProperties();
UnicastIPAddressInformationCollection coll = adapterPropertis.UnicastAddresses;
foreach (var col in coll)
{
ls.Add(col.Address);
}
}
return ls;
}
catch (Exception)
{
return new List<IPAddress>();
}
}
以上所说的联网,包括连接在局域网中。
希望给有需要的朋友们带来帮助;
到此这篇关于C#获取本地IP的四种方式示例详解的文章就介绍到这了,更多相关C#获取本地IP内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!
本文标题为:C#获取本地IP的四种方式示例详解


基础教程推荐
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#中 Json 序列化去掉null值的方法 2022-11-18
- 实例详解C#实现http不同方法的请求 2022-12-26
- C# 解析XML和反序列化的示例 2023-04-14
- C#中的Linq to JSON操作详解 2023-06-08
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- Unity shader实现高斯模糊效果 2023-01-16