C# 获取本机IP(优化项目实际使用版)

好一段时间没来更新博客了,因为密码实在记不住,烦死了,密码干脆直接用那个找回密码链接的一部分。

吐槽完说正事了,关于C#  获取本机IP的,最开始用的是下面的,但是因为获取IP的有点多,而且难判断,忽略了。

            IPAddress[] addressList = Dns.GetHostAddresses(Dns.GetHostName());

    后来换成了获取所有网卡的,网上这个案例很多

            NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

但是获取的IP地址也还是很多,判断少,最后改为这样的:

        public static List<IPAddress> GetServerIP()
        {
            List<IPAddress> ipaddress = new List<IPAddress> ();

//获取网卡 NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); try { //用于ping当前获取的网卡是否当前电脑使用的 using (Ping ping = new Ping()) { foreach (NetworkInterface ni in interfaces) { //初学应该比较难懂这段,就是说枚举里是否包含某个枚举 //Wireless80211(无线连接)是否拥有Ethernet(以太网连接),所以所有包含以太网的都可以 if ((ni.NetworkInterfaceType & NetworkInterfaceType.Ethernet) != NetworkInterfaceType.Ethernet) continue; var ippros = ni.GetIPProperties().UnicastAddresses; foreach (UnicastIPAddressInformation ip in ippros) { //还可以继续判断是否为0.0.0.0,是否172.0.0.1 之类的 //忽略不是ipv4的 if (ip.Address.AddressFamily != AddressFamily.InterNetwork) continue; //ping获取的IP地址,如果ping不通则不是当前使用的网络 var rep = ping.Send(ip.Address); if (rep.Status != IPStatus.Success) continue; //项目需要 ipaddress.Add(ip.Address); } } } } catch { //win7如果全部网卡禁用ping会报错,返回空 return ipaddress; } return ipaddress; }

相对网上的,加了ping和Ethernet枚举判断的优化(不会忽略无线网卡)

懒得排版了,今天事还比较多,大家凑合着看。

posted @ 2017-11-15 10:11  zlyxm  阅读(1251)  评论(0编辑  收藏  举报