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 }