从Dns.GetHostEntry()获取IPv4地址
我在这里有一些代码在IPv4机器上很好,但是在我们的构build服务器(IPv6)上失败了。 简而言之:
IPHostEntry ipHostEntry = Dns.GetHostEntry(string.Empty);
GetHostEntry的文档说传入string.Empty将得到你本地主机的IPv4地址。 这是我想要的。 问题是它在我们的IPv6机器上返回string“:: 1:”,我相信它是IPv6地址。
从任何其他IPv4机器ping机器给出了一个很好的IPv4地址…并从自己做一个“ping -4机器名”给出正确的IPv4地址….但定期从它自己给出“:: 1:”。
我怎样才能从本身获得这台机器的IPv4?
你看过回报中的所有地址 ,丢弃InterNetworkV6家族中的哪些,只保留IPv4的?
要查找所有本地IPv4地址:
IPAddress[] ipv4Addresses = Array.FindAll( Dns.GetHostEntry(string.Empty).AddressList, a => a.AddressFamily == AddressFamily.InterNetwork);
或者使用Array.Find
或Array.FindLast
如果你只想要一个。
public Form1() { InitializeComponent(); string myHost = System.Net.Dns.GetHostName(); string myIP = null; for (int i = 0; i <= System.Net.Dns.GetHostEntry(myHost).AddressList.Length - 1; i++) { if (System.Net.Dns.GetHostEntry(myHost).AddressList[i].IsIPv6LinkLocal == false) { myIP = System.Net.Dns.GetHostEntry(myHost).AddressList[i].ToString(); } } }
在publicvariables中声明myIP和myHost,并在窗体的任何函数中使用。
IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName); IPAddress ipAddress = ipHostInfo.AddressList .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
public static string GetIPAddress(string hostname) { IPHostEntry host; host = Dns.GetHostEntry(hostname); foreach (IPAddress ip in host.AddressList) { if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { //System.Diagnostics.Debug.WriteLine("LocalIPadress: " + ip); return ip.ToString(); } } return string.Empty; }
要find所有有效的地址列表,这是我用过的代码
public static IEnumerable<string> GetAddresses() { var host = Dns.GetHostEntry(Dns.GetHostName()); return (from ip in host.AddressList where ip.AddressFamily == AddressFamily.lo select ip.ToString()).ToList(); }
IPv6的
lblIP.Text = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList(0).ToString()
IPv4的
lblIP.Text = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList(1).ToString()
- 用IDisposable清理Excel互操作对象
- 在.NET 4中将C#对象转换为JSONstring
- 如何将IIS 7 Web部署与MSBuild(TeamCity)集成
- 如何获得在VB.NET中编写的用于Excel的COM服务器安装并注册在自动化服务器列表中?
- 僵尸是否存在…在.NET中?
- 在debugging过程中,在Visual Studio中自动附加到subprocess
- 为什么.NET的File.Open使UNCpath过度的SMB调用?
- 无法使用visual studio 2013debugging托pipe代码(“无法评估expression式”错误 – 我正在使用debugging版本)(请注意VS 2012的工作原理)
- 任何方式来重写.NET Windows服务名称,而不重新编译?