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

zsmj1994 2016-04-04 09:56:57
IPHostEntry fromHE = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 80);
EndPoint EndPointFrom = (ipEndPointFrom);
toolStripStatusLabel1.Text = EndPointFrom.ToString();
最后显示的结果是这样
怎样才能显示如180.102.111.169这样的格式呢?
...全文
14611 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chic-Life 2017-11-20
  • 打赏
  • 举报
回复
Dns 点不出 是需要引用什么吗
e2d941 2017-06-03
  • 打赏
  • 举报
回复
以上所有代码在Win10下测试,声称能够获取IPV4的代码获取的都是本机IP,类似192.168.0.101
qq_28705505 2017-03-14
  • 打赏
  • 举报
回复
引用 16 楼 qiujibin89 的回复:

IPAddress localAddress = AddressHelper.GetLocalhostIPv4Addresses().First();
AddressHelper是什么?
newitman_com 2017-02-10
  • 打赏
  • 举报
回复
引用 楼主 u012699952 的回复:
IPHostEntry fromHE = Dns.GetHostEntry(Dns.GetHostName()); IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 80); EndPoint EndPointFrom = (ipEndPointFrom); toolStripStatusLabel1.Text = EndPointFrom.ToString(); 最后显示的结果是这样 怎样才能显示如180.102.111.169这样的格式呢?
IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 80); 0是显示IPv6,把0改成1就是显示IPv4地址
qiujibin89 2016-11-26
  • 打赏
  • 举报
回复
using System.Net; using System.Net.Sockets; using MyNetworkLibrary;
qiujibin89 2016-11-26
  • 打赏
  • 举报
回复

IPAddress localAddress = AddressHelper.GetLocalhostIPv4Addresses().First();
IT老大哥 2016-07-01
  • 打赏
  • 举报
回复
引用 14 楼 Benjay77 的回复:
Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault<IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString()
就这一行代码 简单残暴
太残暴,太有效!
smthgdin_020 2016-04-05
  • 打赏
  • 举报
回复
ip.AddressFamily == AddressFamily.InterNetwork
江南小鱼 2016-04-05
  • 打赏
  • 举报
回复
win7以上os有ipv4、ipv6两个协议,获取ip地址的时候默认是ipv6的地址,代码要加ipv4的限制,才能输出192.168.20.1这种
qbilbo 2016-04-05
  • 打赏
  • 举报
回复
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);
}
Benjay77 2016-04-05
  • 打赏
  • 举报
回复 1
Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault<IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString()
就这一行代码 简单残暴
qq405165798 2016-04-05
  • 打赏
  • 举报
回复
需要提醒楼主的是, 很多人的电脑都不是一张网卡, 二个同一张网卡也可能有多个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);
        }
qq405165798 2016-04-05
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Windows.Forms;
用到的引用,已发表的不能编辑真是丹腾
lccleo 2016-04-05
  • 打赏
  • 举报
回复
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;
        }
zbdzjx 2016-04-05
  • 打赏
  • 举报
回复
又找了台Windows 2003的电脑上测了一下,结果是,2003下只能检测到一个IPV4,而在Windows7下能检测出IPV4和IPV6两个。 在网上搜了一下,如果安装了虚拟机或是多个网卡,应该会检测出更多个。 看来只能一个个的去测试,看看是IPV4的,还是IPV6的了。
zbdzjx 2016-04-05
  • 打赏
  • 举报
回复
楼主的语句加个断点就能看出问题了。
在我电脑(Win 7 32位+VS 2012)上测试的,如下图,只要把[0]改成[1]就OK了。
john_QQ:2335298917 2016-04-04
  • 打赏
  • 举报
回复
引用 4 楼 u012699952 的回复:
[quote=引用 3 楼 tcmakebest 的回复:] 1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6
为什么都是这种格式的ip呢 我想要180.102.111.169这种的[/quote] 你先建立一个例子代码,按照1楼的代码,拷贝过去,可以看到获得的IP地址有IPV6和IPV4的,你得选一个IPV4的
zsmj1994 2016-04-04
  • 打赏
  • 举报
回复
引用 3 楼 tcmakebest 的回复:
1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6
为什么都是这种格式的ip呢 我想要180.102.111.169这种的
tcmakebest 2016-04-04
  • 打赏
  • 举报
回复
1楼的代码是可以列出全部IP的,包含IPV6和传统V4的,楼主的那个也是IP啊,是IPV6
zsmj1994 2016-04-04
  • 打赏
  • 举报
回复
引用 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());
}
}



还是不管用啊
加载更多回复(1)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧