最终目的:可以正确获取到正在联网的网卡所在的局域网IP。
公网IP可以这样获得:怎样才能获得到正确的内网IP?

解决方案 »

  1.   

      public void GetLocalIp()
            {
                if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() == true)
                {
                    System.Net.NetworkInformation.NetworkInterface[] interfaces = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
                                    foreach (System.Net.NetworkInformation.NetworkInterface ni in interfaces)
                    {
                        //以下代码不能处理网络是否识别了只要有IP地址,都通过了
                        if (ni.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up&ni.NetworkInterfaceType!=NetworkInterfaceType.Tunnel&ni.NetworkInterfaceType!=NetworkInterfaceType.Loopback)
                        {
                            System.Net.NetworkInformation.IPInterfaceProperties property = ni.GetIPProperties();
                            foreach (System.Net.NetworkInformation.UnicastIPAddressInformation ip in
                                property.UnicastAddresses)
                            {
                                if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                                {
                                    cmbLocalIP.Text = ip.Address.ToString();
                                }
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("没检测到能联网的网卡,请检查网卡状态!");
                }
            }
      

  2.   

    如果是获取本机的IP的话,这样获取公网IP其实效率也挺低的。
    可以用如下代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                IPHostEntry ipHostEntry = Dns.GetHostEntry(Dns.GetHostName());
                foreach (IPAddress ip in ipHostEntry.AddressList)
                {
                    Console.WriteLine("{0}:{1}", ip.AddressFamily, ip.ToString());
                }
            }
        }
    }这个代码可以把所有本机用到的IP,包括IPv4,IPv6都找出来。
      

  3.   

    这个没有现成方法可以获得,因为网络是无限扩展的,内网IP也许不止一个,也可能不止一层,每一层都会有一个不同的IP,所以即使获得也没有什么意义。
      

  4.   

    http://download.csdn.net/detail/yeqi3000/5383213
    这个里面有相关代码