获取和检查本地计算机的IP地址
我想在本地机器上获取IP地址:获取和检查本地计算机的IP地址
private string GetIP()
{
string strHostName = "";
strHostName = System.Net.Dns.GetHostName();
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
foreach (IPAddress ipaddr in addr)
{
if (ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
return ipaddr.ToString();
}
return "IP error";
}
但是我无法找到一个方法来确定哪些接口是一个我需要的。例如:
我很幸运的是,我需要的是第二个在列表中。但如果它在后面,我会得到一个错误的界面IP。如何检查我是否获得IP用于本地连接(或通常,负责连接的接口)。
您可以直接(而不仅仅是他们的IPS)枚举network interfaces,然后筛选基于其接口类型:
var interfaces = NetworkInterface.GetAllNetworkInterfaces()
然后用类似的东西过滤它:
interfaces.Where(ni => ni.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel)
它仍然可以返回多个网络接口,但它会过滤掉至少他们中的一些你不想要的。我使用上面的过滤器来摆脱环回和虚拟机接口。
然后从那里你可以得到网络接口的IP地址使用IP properties。
在简洁的精神,一旦你确定哪些接口是正确的,你可以用得到的接口的IPv4地址(或其中至少一个):
iface.GetIPProperties().UnicastAddresses.SingleOrDefault(ua => ua.Address.AddressFamily == AddressFamily.InterNetwork);
没有方法,对主机名
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
它在你的DNS返回本地计算机的地址为所有登记地址
因此,如果你的DNS你的机器有一个返回一个地址名称与一个IP地址相关联,它将仅返回该地址,否则将返回与该主机名关联的地址列表
您必须“过滤”列表以了解您的本地地址
看一看下面:
How to get the IP address of the server on which my C# application is running on?
对我说,返回相同的地址集与'GetHostEntry()'。 – svick 2012-01-31 13:45:21
他们返回相同的信息,但他们的行为不同 http://msdn.microsoft.com/en-us/library/ms143998(v=vs.100)。aspx GetHostAddresses方法对于IP文字具有不同的行为。如果上述步骤#1成功(它成功解析为IP地址),则该地址将立即返回。没有尝试进行反向查找。 – 2012-01-31 13:51:59
sivick说什么。 GetHostAddresses()或GetHostEntry()我得到一个列表。 – and 2012-01-31 13:52:59
你怎么能指望你程序知道它应该查看哪个NIC? – 2012-01-31 13:42:55
这就是我不知道如何实现。现在只需要列表中的第一个InterNetwork。我想以某种方式验证它是本地连接。 – and 2012-01-31 13:51:33
什么是所有在列表中的其他IP的,如果他们不属于本地连接? – 2012-01-31 13:52:38