我正在尝试在本地计算机上获取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(或者通常是负责连接的接口)。
答案 0 :(得分:2)
您可以直接枚举network interfaces(而不仅仅是他们的IP),然后根据其接口类型进行过滤:
var interfaces = NetworkInterface.GetAllNetworkInterfaces()
然后用以下内容过滤它:
interfaces.Where(ni => ni.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel)
它仍然可以返回多个网络接口,但它会过滤掉至少一些你不想要的网络接口。我使用上面的过滤器来摆脱环回和虚拟机接口。
然后,您可以使用IP properties获取网络接口的IP地址。
本着简洁的精神,一旦确定哪个接口是正确的接口,您就可以使用以下方式获取接口的IPv4地址(或至少其中一个接口):
iface.GetIPProperties().UnicastAddresses.SingleOrDefault(ua => ua.Address.AddressFamily == AddressFamily.InterNetwork);
答案 1 :(得分:0)
没有针对主机名返回一个地址的方法
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?