C#怎样获取本机的ip地址啊

时间:2021-01-08 16:02:37
 IPHostEntry fromHE = Dns.GetHostEntry(Dns.GetHostName());
 IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 80);
 EndPoint EndPointFrom = (ipEndPointFrom);
 toolStripStatusLabel1.Text = EndPointFrom.ToString();
最后显示的结果是这样 C#怎样获取本机的ip地址啊
怎样才能显示如180.102.111.169这样的格式呢?

21 个解决方案

#1


你这是IPV6的

private void GetIP()  
  {  
      string hostName = Dns.GetHostName();//本机名   
     //System.Net.IPAddress[] addressList = Dns.GetHostByName(hostName).AddressList;//会警告GetHostByName()已过期,   //我运行时且只返回了一个IPv4的地址   
    System.Net.IPAddress[] addressList = Dns.GetHostAddresses(hostName);//会返回所有地址,包括IPv4和IPv6   
     foreach (IPAddress ip in addressList)  
     {  
         listBox1.Items.Add(ip.ToString());  
     }  
 }  

#2


引用 1 楼 nry19871012 的回复:
你这是IPV6的

private void GetIP()  
  {  
      string hostName = Dns.GetHostName();//本机名   
     //System.Net.IPAddress[] addressList = Dns.GetHostByName(hostName).AddressList;//会警告GetHostByName()已过期,   //我运行时且只返回了一个IPv4的地址   
    System.Net.IPAddress[] addressList = Dns.GetHostAddresses(hostName);//会返回所有地址,包括IPv4和IPv6   
     foreach (IPAddress ip in addressList)  
     {  
         listBox1.Items.Add(ip.ToString());  
     }  
 }  


C#怎样获取本机的ip地址啊
还是不管用啊

#3


1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6

#4


引用 3 楼 tcmakebest 的回复:
1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6

为什么都是这种格式的ip呢 我想要180.102.111.169这种的

#5


引用 4 楼 u012699952 的回复:
Quote: 引用 3 楼 tcmakebest 的回复:

1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6

为什么都是这种格式的ip呢 我想要180.102.111.169这种的

你先建立一个例子代码,按照1楼的代码,拷贝过去,可以看到获得的IP地址有IPV6和IPV4的,你得选一个IPV4的

#6


private IEnumerable<System.Net.IPAddress> GetIPs()
{
        System.Net.IPAddress[] addressList = Dns.GetHostAddresses(Dns.GetHostName());
        return addressList.Where(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork);
}

//调用
foreach (var v in GetIPs())
{
    Console.WriteLine(v);
}

#7


win7以上os有ipv4、ipv6两个协议,获取ip地址的时候默认是ipv6的地址,代码要加ipv4的限制,才能输出192.168.20.1这种

#8


ip.AddressFamily == AddressFamily.InterNetwork

#9


楼主的语句加个断点就能看出问题了。
在我电脑(Win 7 32位+VS 2012)上测试的,如下图,只要把[0]改成[1]就OK了。
C#怎样获取本机的ip地址啊

#10


又找了台Windows 2003的电脑上测了一下,结果是,2003下只能检测到一个IPV4,而在Windows7下能检测出IPV4和IPV6两个。
在网上搜了一下,如果安装了虚拟机或是多个网卡,应该会检测出更多个。
看来只能一个个的去测试,看看是IPV4的,还是IPV6的了。

#11


public string GetLocalIP()
        {
            //获取说有网卡信息
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface adapter in nics)
            {
                //判断是否为以太网卡
                //Wireless80211         无线网卡    Ppp     宽带连接
                //Ethernet              以太网卡   
                //这里篇幅有限贴几个常用的,其他的返回值大家就自己百度吧!

                if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                {
                    //获取以太网卡网络接口信息
                    IPInterfaceProperties ip = adapter.GetIPProperties();
                    //获取单播地址集
                    UnicastIPAddressInformationCollection ipCollection = ip.UnicastAddresses;
                    foreach (UnicastIPAddressInformation ipadd in ipCollection)
                    {
                        //InterNetwork    IPV4地址      InterNetworkV6        IPV6地址
                        //Max            MAX 位址
                        if (ipadd.Address.AddressFamily == AddressFamily.InterNetwork)
                        //判断是否为ipv4
                        {

                            strLocalIP = ipadd.Address.ToString();//获取ip
                            return strLocalIP;//获取ip

                        }
                    }
                }
            }
            return null;
        }

#12


需要提醒楼主的是, 很多人的电脑都不是一张网卡,  二个同一张网卡也可能有多个IP
所有11L的方法有点瑕疵,就是IP没有完全列举
最后的结果要是给人看还好,要是一个中间变量,那你可要好好检查一下IP地址是不是你要的那一个.

  public string GetLocalIP()
        {
            List<string> strIPs = new List<string>();
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface adapter in nics)
            {

                if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                {
                    var mac = adapter.GetPhysicalAddress(); Console.WriteLine(mac);
                    IPInterfaceProperties ip = adapter.GetIPProperties();
                    UnicastIPAddressInformationCollection ipCollection = ip.UnicastAddresses;
                    foreach (UnicastIPAddressInformation ipadd in ipCollection)
                    {
                        //InterNetwork    IPV4地址      
                        //InterNetworkV6        IPV6地址 
                        if (ipadd.Address.AddressFamily == AddressFamily.InterNetwork)
                        {   //判断是否为ipv4
                            Console.WriteLine(ipadd.Address.ToString());
                            strIPs.Add(ipadd.Address.ToString());
                        }
                    }
                }
            }
            return string.Join(";", strIPs);
        }

#13


using System;
using System.Collections.Generic;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Windows.Forms;

用到的引用,已发表的不能编辑真是丹腾

#14


Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault<IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString()

就这一行代码 简单残暴

#15


引用 14 楼 Benjay77 的回复:
Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault<IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString()

就这一行代码 简单残暴

太残暴,太有效!

#16



IPAddress localAddress = AddressHelper.GetLocalhostIPv4Addresses().First();

#17


using System.Net;
using System.Net.Sockets;
using MyNetworkLibrary;

#18


引用 楼主 u012699952 的回复:
 IPHostEntry fromHE = Dns.GetHostEntry(Dns.GetHostName());
 IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 80);
 EndPoint EndPointFrom = (ipEndPointFrom);
 toolStripStatusLabel1.Text = EndPointFrom.ToString();
最后显示的结果是这样 C#怎样获取本机的ip地址啊
怎样才能显示如180.102.111.169这样的格式呢?


 IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 80); 

 0是显示IPv6,把0改成1就是显示IPv4地址

#19


引用 16 楼 qiujibin89 的回复:

IPAddress localAddress = AddressHelper.GetLocalhostIPv4Addresses().First();
 AddressHelper是什么?

#20


以上所有代码在Win10下测试,声称能够获取IPV4的代码获取的都是本机IP,类似192.168.0.101

#21


Dns 点不出 是需要引用什么吗

#1


你这是IPV6的

private void GetIP()  
  {  
      string hostName = Dns.GetHostName();//本机名   
     //System.Net.IPAddress[] addressList = Dns.GetHostByName(hostName).AddressList;//会警告GetHostByName()已过期,   //我运行时且只返回了一个IPv4的地址   
    System.Net.IPAddress[] addressList = Dns.GetHostAddresses(hostName);//会返回所有地址,包括IPv4和IPv6   
     foreach (IPAddress ip in addressList)  
     {  
         listBox1.Items.Add(ip.ToString());  
     }  
 }  

#2


引用 1 楼 nry19871012 的回复:
你这是IPV6的

private void GetIP()  
  {  
      string hostName = Dns.GetHostName();//本机名   
     //System.Net.IPAddress[] addressList = Dns.GetHostByName(hostName).AddressList;//会警告GetHostByName()已过期,   //我运行时且只返回了一个IPv4的地址   
    System.Net.IPAddress[] addressList = Dns.GetHostAddresses(hostName);//会返回所有地址,包括IPv4和IPv6   
     foreach (IPAddress ip in addressList)  
     {  
         listBox1.Items.Add(ip.ToString());  
     }  
 }  


C#怎样获取本机的ip地址啊
还是不管用啊

#3


1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6

#4


引用 3 楼 tcmakebest 的回复:
1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6

为什么都是这种格式的ip呢 我想要180.102.111.169这种的

#5


引用 4 楼 u012699952 的回复:
Quote: 引用 3 楼 tcmakebest 的回复:

1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6

为什么都是这种格式的ip呢 我想要180.102.111.169这种的

你先建立一个例子代码,按照1楼的代码,拷贝过去,可以看到获得的IP地址有IPV6和IPV4的,你得选一个IPV4的

#6


private IEnumerable<System.Net.IPAddress> GetIPs()
{
        System.Net.IPAddress[] addressList = Dns.GetHostAddresses(Dns.GetHostName());
        return addressList.Where(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork);
}

//调用
foreach (var v in GetIPs())
{
    Console.WriteLine(v);
}

#7


win7以上os有ipv4、ipv6两个协议,获取ip地址的时候默认是ipv6的地址,代码要加ipv4的限制,才能输出192.168.20.1这种

#8


ip.AddressFamily == AddressFamily.InterNetwork

#9


楼主的语句加个断点就能看出问题了。
在我电脑(Win 7 32位+VS 2012)上测试的,如下图,只要把[0]改成[1]就OK了。
C#怎样获取本机的ip地址啊

#10


又找了台Windows 2003的电脑上测了一下,结果是,2003下只能检测到一个IPV4,而在Windows7下能检测出IPV4和IPV6两个。
在网上搜了一下,如果安装了虚拟机或是多个网卡,应该会检测出更多个。
看来只能一个个的去测试,看看是IPV4的,还是IPV6的了。

#11


public string GetLocalIP()
        {
            //获取说有网卡信息
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface adapter in nics)
            {
                //判断是否为以太网卡
                //Wireless80211         无线网卡    Ppp     宽带连接
                //Ethernet              以太网卡   
                //这里篇幅有限贴几个常用的,其他的返回值大家就自己百度吧!

                if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                {
                    //获取以太网卡网络接口信息
                    IPInterfaceProperties ip = adapter.GetIPProperties();
                    //获取单播地址集
                    UnicastIPAddressInformationCollection ipCollection = ip.UnicastAddresses;
                    foreach (UnicastIPAddressInformation ipadd in ipCollection)
                    {
                        //InterNetwork    IPV4地址      InterNetworkV6        IPV6地址
                        //Max            MAX 位址
                        if (ipadd.Address.AddressFamily == AddressFamily.InterNetwork)
                        //判断是否为ipv4
                        {

                            strLocalIP = ipadd.Address.ToString();//获取ip
                            return strLocalIP;//获取ip

                        }
                    }
                }
            }
            return null;
        }

#12


需要提醒楼主的是, 很多人的电脑都不是一张网卡,  二个同一张网卡也可能有多个IP
所有11L的方法有点瑕疵,就是IP没有完全列举
最后的结果要是给人看还好,要是一个中间变量,那你可要好好检查一下IP地址是不是你要的那一个.

  public string GetLocalIP()
        {
            List<string> strIPs = new List<string>();
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface adapter in nics)
            {

                if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                {
                    var mac = adapter.GetPhysicalAddress(); Console.WriteLine(mac);
                    IPInterfaceProperties ip = adapter.GetIPProperties();
                    UnicastIPAddressInformationCollection ipCollection = ip.UnicastAddresses;
                    foreach (UnicastIPAddressInformation ipadd in ipCollection)
                    {
                        //InterNetwork    IPV4地址      
                        //InterNetworkV6        IPV6地址 
                        if (ipadd.Address.AddressFamily == AddressFamily.InterNetwork)
                        {   //判断是否为ipv4
                            Console.WriteLine(ipadd.Address.ToString());
                            strIPs.Add(ipadd.Address.ToString());
                        }
                    }
                }
            }
            return string.Join(";", strIPs);
        }

#13


using System;
using System.Collections.Generic;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Windows.Forms;

用到的引用,已发表的不能编辑真是丹腾

#14


Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault<IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString()

就这一行代码 简单残暴

#15


引用 14 楼 Benjay77 的回复:
Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault<IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString()

就这一行代码 简单残暴

太残暴,太有效!

#16



IPAddress localAddress = AddressHelper.GetLocalhostIPv4Addresses().First();

#17


using System.Net;
using System.Net.Sockets;
using MyNetworkLibrary;

#18


引用 楼主 u012699952 的回复:
 IPHostEntry fromHE = Dns.GetHostEntry(Dns.GetHostName());
 IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 80);
 EndPoint EndPointFrom = (ipEndPointFrom);
 toolStripStatusLabel1.Text = EndPointFrom.ToString();
最后显示的结果是这样 C#怎样获取本机的ip地址啊
怎样才能显示如180.102.111.169这样的格式呢?


 IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 80); 

 0是显示IPv6,把0改成1就是显示IPv4地址

#19


引用 16 楼 qiujibin89 的回复:

IPAddress localAddress = AddressHelper.GetLocalhostIPv4Addresses().First();
 AddressHelper是什么?

#20


以上所有代码在Win10下测试,声称能够获取IPV4的代码获取的都是本机IP,类似192.168.0.101

#21


Dns 点不出 是需要引用什么吗