1. 程式人生 > 程式設計 >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}");
    //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內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!