獲取本地IP的四種方式


1.第一種方式

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

 1         /// <summary>
 2         /// 網絡不通暢可以獲取
 3         ///    不過能獲取到具體的IP
 4         /// </summary>
 5         /// <returns></returns>
 6         public static List<IPAddress> GetByGetHostAddresses()
 7         {
 8             try
 9             {
10                 IPAddress[] adds = Dns.GetHostAddresses(Dns.GetHostName());
11                 return adds == null || adds.Length == 0 ? new List<IPAddress>() : adds.ToList<IPAddress>();
12             }
13             catch (Exception)
14             {
15                 return new List<IPAddress>();
16 
17             }
18         }

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

2.第二種方式

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

 1         /// <summary>
 2         /// 只有網絡通暢才能獲取
 3         /// </summary>
 4         /// <returns></returns>
 5         public static List<IPAddress> GetByManagementClass()
 6         {
 7             try
 8             {
 9                 ManagementClass mClass = new System.Management.ManagementClass("Win32_NetworkAdapterConfiguration");
10                 ManagementObjectCollection managementObjectCollection = mClass.GetInstances();
11                 List<IPAddress> ls = new List<IPAddress>();
12                 foreach (var item in managementObjectCollection)
13                 {
14                     if ((bool)item["IPEnabled"] == true)
15                     {
16                         foreach (var ip in (string[])item["IPAddress"])
17                         {
18                             IPAddress ipout = null;
19                             IPAddress.TryParse(ip, out ipout);
20                             if (ipout != null)
21                             {
22 
23                                 ls.Add(ipout);
24                             }
25                         }
26                     }
27                 }
28                 return ls;
29             }
30             catch (Exception)
31             {
32                 return new List<IPAddress>();
33 
34             }
35         }

同樣的這種方式也受到網絡的約束,沒有聯網的狀態下不一定能夠獲取到IP;

3.第三種方式

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

 1  public static List<IPAddress> GetByCMD()
 2         {
 3             try
 4             {
 5                 Process cmd = new Process();
 6                 cmd.StartInfo.FileName = "ipconfig.exe";
 7                 cmd.StartInfo.Arguments = "/all";
 8                 cmd.StartInfo.RedirectStandardOutput = true;
 9                 cmd.StartInfo.RedirectStandardInput = true;
10                 cmd.StartInfo.UseShellExecute = false;
11                 cmd.StartInfo.CreateNoWindow = true;
12                 cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
13                 cmd.Start();
14                 string info = "";
15                 List<IPAddress> ls = new List<IPAddress>();
16                 // info = cmd.StandardOutput.ReadToEnd();
17                 Regex validipregex = new Regex(@"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}");
18                 //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])$");
19                 while ((info = cmd.StandardOutput.ReadLine()) != null)
20                 {
21                     IPAddress ip = null;
22                     Console.WriteLine(info);
23                     info = validipregex.Match(info).Value;
24 
25                     IPAddress.TryParse(info, out ip);
26 
27                     if (ip != null)
28                     {
29                         ls.Add(ip);
30                     }
31                 }
32 
33                 cmd.WaitForExit();
34                 cmd.Close();
35                 return ls;
36             }
37             catch (Exception)
38             {
39                 return new List<IPAddress>();
40 
41             }
42         }

即便是通過這種方式來獲取IP,如果在本機電腦沒有聯網的狀態下,也是獲取不到IP的,並且也不太建議使用這種方式;

4.第四種方法

采用NetworkInterface.GetAllNetworkInterfaces的方式是不受網絡的影響的,聯網或者不聯網都能夠獲取到IP,詳細請看代碼:

 1          /// <summary>
 2         /// 無論網絡通不通都能獲取到Ip
 3         /// </summary>
 4         /// <returns></returns>
 5         public static List<IPAddress> GetByNetworkInterface()
 6         {
 7             try
 8             {
 9                 NetworkInterface[] intf = NetworkInterface.GetAllNetworkInterfaces();
10                 List<IPAddress> ls = new List<IPAddress>();
11                 foreach (var item in intf)
12                 {
13                     IPInterfaceProperties adapterPropertis = item.GetIPProperties();
14                     UnicastIPAddressInformationCollection coll = adapterPropertis.UnicastAddresses;
15                     foreach (var col in coll)
16                     {
17                         ls.Add(col.Address);
18                     }
19                 }
20                 return ls;
21             }
22             catch (Exception)
23             {
24                 return new List<IPAddress>();
25 
26             }
27         }

以上所說的聯網,包括連接在局域網中。

希望給有需要的朋友們帶來幫助;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM