原理,首先,要用System.Net.IPHostEntry把IP解析成IP实体,然后利用System.Net.IPAddress来解析IP列表,值得注意的是,IP4的IP地址,可以用AddressList[0]获取,IP6的IP地址,AddressList[1]获取。
判断协议的方法,很简单,利用System.Net.Sockets.AddressFamily可以判断IP类型。
对于 IPv4,返回 System.Net.Sockets.AddressFamily.InterNetwork;对于 IPv6,返回 System.Net.Sockets.AddressFamily.InterNetworkV6。
如图:
所以,可以用如下代码判断并获取正确的IP地址。
private IPAddress getIdAddress() { //IPHostEntry ipEntity = Dns.GetHostEntry(Dns.GetHostName()); ////IPAddress ipAddr = ipEntity.AddressList[0]; //IPAddress ipAddr = Dns.GetHostAddresses(Dns.GetHostName())[0]; //if (ipAddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)//判断是否IP6协议 //{ // ipAddr = Dns.GetHostEntry(Dns.GetHostName()).AddressList[1]; //} IPAddress ipAddr = null; IPAddress [] arrIP = Dns.GetHostAddresses(Dns.GetHostName()); foreach (IPAddress ip in arrIP) { if (System.Net.Sockets.AddressFamily.InterNetwork.Equals(ip.AddressFamily)) { ipAddr = ip; } else if (System.Net.Sockets.AddressFamily.InterNetworkV6.Equals(ip.AddressFamily)) { ipAddr = ip; } } return ipAddr; }