获取本地IP

 1 public string GetLocalIP()
 2         {
 3             try
 4             {
 5                 // 无法处理存在VMware虚拟机的情况
 6                 //string HostName = Dns.GetHostName(); //得到主机名
 7                 //IPHostEntry IpEntry = Dns.GetHostEntry(HostName);
 8                 //for (int i = 0; i < IpEntry.AddressList.Length; i++)
 9                 //{
10                 //    //从IP地址列表中筛选出IPv4类型的IP地址
11                 //    //AddressFamily.InterNetwork表示此IP为IPv4,
12                 //    //AddressFamily.InterNetworkV6表示此地址为IPv6类型
13                 //    if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork)
14                 //    {
15                 //        return IpEntry.AddressList[i].ToString();
16                 //    }
17                 //}
18 
19                 // Get a list of all network interfaces (usually one per network card, dialup, and VPN connection) 
20                 NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
21                 StringBuilder sb = new StringBuilder();
22                 foreach (NetworkInterface network in networkInterfaces)
23                 {
24                     // 排除掉不可用的网络接口
25                     if (network.OperationalStatus != OperationalStatus.Up)
26                         continue;
27 
28                     // Read the IP configuration for each network 
29                     IPInterfaceProperties properties = network.GetIPProperties();
30 
31                     // 排除掉没有网关的地址(VMware)
32                     var gatewayAddr = properties.GatewayAddresses.FirstOrDefault();
33                     if (gatewayAddr == null || gatewayAddr.Address.ToString().Equals("0.0.0.0"))
34                         continue;
35 
36                     // Each network interface may have multiple IP addresses 
37                     foreach (IPAddressInformation address in properties.UnicastAddresses)
38                     {
39                         // We're only interested in IPv4 addresses for now 
40                         if (address.Address.AddressFamily != AddressFamily.InterNetwork)
41                             continue;
42 
43                         // Ignore loopback addresses (e.g., 127.0.0.1) 
44                         if (IPAddress.IsLoopback(address.Address))
45                             continue;
46 
47                         return address.Address.ToString();
48                     }
49                 }
50                 return "";
51             }
52             catch (Exception)
53             {
54                 return "";
55             }
56         }

获取一个接口上有多个地址的代码

 1 public static string[] GetAllLocalIPv4(NetworkInterfaceType _type)
 2 {
 3     List<string> ipAddrList = new List<string>();
 4     foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
 5     {
 6         if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
 7         {
 8             foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
 9             {
10                 if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
11                 {
12                     ipAddrList.Add(ip.Address.ToString());
13                 }
14             }
15         }
16     }
17     return ipAddrList.ToArray();
18 }
原文地址:https://www.cnblogs.com/s5689412/p/11347326.html