string ipAddr ="";
string GetHostName = Dns.GetHostName();StringBuilder ipAddrSB = new StringBuilder();
System.Net.IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(GetHostName);System.Net.IPAddress[] addr = ipEntry.AddressList;foreach (IPAddress ip in addr)
{
    ipAddrSB.Append(ip + "|");
}if (ipAddrSB.ToString()[ipAddrSB.Length - 1] == '|')
{
   ipAddr = ipAddrSB.ToString().Substring(0, ipAddrSB.Length - 1);
}
MessageBox.Show(ipAddr,"好长的IP地址啊");得到的结果如下fe80::d06a:4fd3:daf3:8ac2%11|
fe80::8e9:1779:89e3:c836%26|
2002:761c:37c9::761c:37c9|
169.254.138.194|
118.28.55.201|
2001:0:4137:9e76:8e9:1779:89e3:c836倒数第二个和倒数第三个是我认识的IP样子,其它信息都是什么呢?
我应该取哪个?或取哪些?

解决方案 »

  1.   

    登录者安装了多个网卡,并且启动了IPV6
      

  2.   

    你可以看看 IPAddress 类型的属性,它有很多指示,可以用于区分到底是什么类型的IP。例如经常需要使用的不过是 AddressFamily 属性值为 InterNetwork 的那种IP。另外,比如说我的电脑有6个网卡,两个是PC网卡,一个是无线适配器,另外3个是虚拟机软件虚拟出来的网卡,所以即使去 Ipv4 类型的 IP地址我也很可能至少可以找到6个。
      

  3.   


    其实这应该问你自己。或者说这个软件设计者自己原来就没有想这个问题,别人怎么提你想呢。比如设计者就是简单地说了一句“要记录IP,来识别主机”,那么你就必须记录所有IP,而且你的封装好的程序,应该在这个IP列表中某些IP不存在、或者排列颠倒顺序时,你仍然返回给应用程序说它是同一个主机。