溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

詳解C#如何獲取本地IP

發(fā)布時間:2020-07-21 13:38:48 來源:億速云 閱讀:162 作者:小豬 欄目:開發(fā)技術(shù)

小編這次要給大家分享的是詳解C#如何獲取本地IP,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

1.第一種方式

采用System.Net.Dns的GetHostAddress的方式,具體請看代碼:

/// <summary>
  /// 網(wǎng)絡(luò)不通暢可以獲取
  /// 不過能獲取到具體的IP
  /// </summary>
  /// <returns></returns>
  public static List<IPAddress> GetByGetHostAddresses()
  {
   try
   {
    IPAddress[] adds = Dns.GetHostAddresses(Dns.GetHostName());
    return adds == null || adds.Length == 0 &#63; new List<IPAddress>() : adds.ToList<IPAddress>();
   }
   catch (Exception)
   {
    return new List<IPAddress>();

   }
  }

這種方式受到網(wǎng)絡(luò)的影響,如果沒有連接到網(wǎng)絡(luò),本地配置的部分IP是獲取不到的,我也遇到一種情況是,電腦環(huán)境正常,就是獲取不到,原因至今還不知道;

2.第二種方式

采用System.Management.ManagementClass來獲取,詳細(xì)請看代碼:

/// <summary>
  /// 只有網(wǎng)絡(luò)通暢才能獲取
  /// </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>();

   }
  }

同樣的這種方式也受到網(wǎng)絡(luò)的約束,沒有聯(lián)網(wǎng)的狀態(tài)下不一定能夠獲取到IP;

3.第三種方式

我們平時在命令行中輸入ipconfig命令同樣也是能獲取,在程序中啟動Ipconfig應(yīng)用程序,然后解析出來,也是可以獲取得到IP,詳細(xì)請看代碼:

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,如果在本機(jī)電腦沒有聯(lián)網(wǎng)的狀態(tài)下,也是獲取不到IP的,并且也不太建議使用這種方式;

4.第四種方法

采用NetworkInterface.GetAllNetworkInterfaces的方式是不受網(wǎng)絡(luò)的影響的,聯(lián)網(wǎng)或者不聯(lián)網(wǎng)都能夠獲取到IP,詳細(xì)請看代碼:

/// <summary>
  /// 無論網(wǎng)絡(luò)通不通都能獲取到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>();

   }
  }

以上所說的聯(lián)網(wǎng),包括連接在局域網(wǎng)中。

看完這篇關(guān)于詳解C#如何獲取本地IP的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI