C#获取本地IP的四种方式示例详解
作者:Koalin 发布时间:2023-04-16 00:52:50
标签: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>();
}
}
以上所说的联网,包括连接在局域网中。
希望给有需要的朋友们带来帮助;
来源:https://www.cnblogs.com/hglSV/p/10759468.html
0
投稿
猜你喜欢
- 一、前言最近自己在学习Spring boot的过程中开发了一个组件 multithreadpool-spring-boot-starter,
- Maven Release当我们的项目达到了当前的目标,在经过检测后不需要改变。这时我们就需要将SNAPSHOT版本打包成RELEASE版本
- 一、方法这里我们用两种方法来实现跑马灯效果,虽然实质上是一种实质就是:1、TextView调出跑马灯效果2、TextView获取焦点&nbs
- java 中模式匹配算法-KMP算法实例详解朴素模式匹配算法的最大问题就是太低效了。于是三位前辈发表了一种KMP算法,其中三个字母分别是这三
- 当时用逆向生成后,实体类中的下划线都被去掉,这时只需要在sqlmap.xml中加以下代码即可。打开mybatis驼峰法则。 <sett
- 本文实例讲述了Android实现的数字格式化用法。分享给大家供大家参考,具体如下:package formatnumber;import j
- 经过几天的折腾,终于到了学习一个重量级的查询方式上,使用@Query注解,使用注解有两种方式,一种是JPQL的SQL语言方式,一种是原生SQ
- 定义:用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。特点: 1、它支持以不同的方式遍历一个
- Java:对象创建和初始化过程1.Java中的数据类型 Java中有3个数据类型:基本数据类型(在Jav
- 多线程@Async的使用体验场景导入:可以将大批量的数据insert操作采用多线程的方式并行执行第三方服务的接口调用:由于存在个别第三方服务
- maven打包时候修改包名称带上git版本号和打包时间使用 maven 插件 git-commit-id-plugin 可以获取项目的git
- 前言:学习了SpringBoot分页查询的两种写法,一种是手动实现,另一种是使用框架实现。现在我将具体的实现流程分享一下。首先是手动实现分页
- 一、Optional类的来源到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公
- 问题描述:String preStr = "a.b.c"; // 这里要把该字符串按小圆点进行分割,成"a&q
- 简要:EigenFace是基于PCA降维的人脸识别算法,PCA是使整体数据降维后的方差最大,没有考虑降维后类间的变化。 它是将图像
- 实现一个自定义的 @Conditional 派生注解自定义一个注解,继承 @Conditional 注解// 派生注解@Retention(
- 关于“标签PDF文件(Tagged PDF)标签PDF文件包含描述文档结构和各种文档元素顺序的元数据,是一种包含后端提供
- 一、字符串:1、访问String中的字符:string本身可看作一个Char数组。string s = "hello world&
- 最近的项目中要实现一个聊天的功能,类似于斗鱼TV的聊天室功能,与服务器端人商量后决定用WebSocket来做,但是在这之前我只知道Socke
- 1. Mybatis的@param注解自定义对象也用@param注解注:使用@param注解,mapper.xml 不加parameterT