当前位置: 首页 > 编程笔记 >

C#获取本地IP的四种方式示例详解

何勇
2023-03-14
本文向大家介绍C#获取本地IP的四种方式示例详解,包括了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++获取本机MAC,IP,MASK地址的方法,包括了C++获取本机MAC,IP,MASK地址的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++获取本机MAC,IP,MASK地址的方法,分享给大家供大家参考。具体方法如下: 希望本文所述对大家的C++程序设计有所帮助。

  • 本文向大家介绍Spring中实例化bean的四种方式详解,包括了Spring中实例化bean的四种方式详解的使用技巧和注意事项,需要的朋友参考一下 前言 在介绍Bean的实例化的方式之前,我们首先需要介绍一下什么是Bean,以及Bean的配置方式。 如果把Spring看作一个大型工厂,那么Spring容器中的Bean就是该工厂的产品。要想使用Spring工厂生产和管理Bean,就需要在配置文件中指

  • 本文向大家介绍Hibernate中获取Session的两种方式代码示例,包括了Hibernate中获取Session的两种方式代码示例的使用技巧和注意事项,需要的朋友参考一下 Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础.对象的生命周期/事务的管理/数据库的存取都与Session息息相关. Session对象是通过SessionFactory构

  • 本文向大家介绍PHP基于新浪IP库获取IP详细地址的方法,包括了PHP基于新浪IP库获取IP详细地址的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP基于新浪IP库获取IP详细地址的方法。分享给大家供大家参考,具体如下: 获取IP地址类使用实例 返回结果 PS:这里再为大家提供几款IP地址相关在线工具供大家参考使用: IP地址归属地在线查询工具: http://tools.jb5

  • 问题内容: 获取我的本地主机IP地址。但这给了我答案。如果我知道的话。 我需要我的“真实” IP地址(例如192.168.xx)来修改配置文件。我怎么能得到? 问题答案: 我通常使用以下代码: 我不知道它的起源,但是它可以在Linux / Windows上运行。

  • 本文向大家介绍详解IOS四种保存数据的方式,包括了详解IOS四种保存数据的方式的使用技巧和注意事项,需要的朋友参考一下 在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题。将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好。下面介绍一下数据保存的方式: 1.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协