在机器上获取所有IP地址

时间:2011-03-11 10:28:04

标签: c# .net wcf networking ip

如何获取运行我的应用程序(C#NET控制台应用程序)的计算机上连接的所有IP地址?我需要将WCF服务绑定到主IP地址,并返回完整IP地址列表的列表。

using System.Net;

string myHostName = Dns.GetHostName().ToString();
string ipAddress = Dns.Resolve(HostName).AddressList[0].ToString();

这就是我现在用来获取主IP地址的内容,但我无法弄清楚如何让其余的返回它们。

如果我将WCF服务绑定到localhost:8000,是否会在主要文件上公开它?

6 个答案:

答案 0 :(得分:43)

DNS变体在网络上运行,但一个DNS条目可以有多个IP地址,一个IP地址可以有多个DNS条目。 更重要的是,地址根本不需要绑定到DNS条目。

对于本地机器,请尝试: -

  foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces())
  {
    Console.WriteLine("Name: " + netInterface.Name);
    Console.WriteLine("Description: " + netInterface.Description);
    Console.WriteLine("Addresses: ");
    IPInterfaceProperties ipProps = netInterface.GetIPProperties();
    foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses)
    {
      Console.WriteLine(" " + addr.Address.ToString());
    }
    Console.WriteLine("");
  }

答案 1 :(得分:8)

我认为这个例子可以帮助你。

// Get host name
String strHostName = Dns.GetHostName();

// Find host by name
IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

// Enumerate IP addresses
foreach(IPAddress ipaddress in iphostentry.AddressList)
{
    ....
}

编辑:

“没有”主要“IP地址这样的东西。

路由表根据目标IP地址(以及扩展名为网络接口,可以是虚拟或物理接口)确定使用哪个外向IP地址。“

答案 2 :(得分:6)

为什么不绑定到0.0.0.0?
那样你就听所有的ips

答案 3 :(得分:1)

IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

答案 4 :(得分:1)

您应该绑定到0.0.0.0:8000,这将在所有可用的IP地址上公开它,并且只有在用户/管理员要求时才绑定到特定的IP地址。

答案 5 :(得分:-2)

我认为OP正在询问如何获取本地NIC上的所有地址,而不仅仅是DNS已知的那些地址。 通过主要,他可能意味着适配器属性中“使用以下IP地址”下的主要地址,而“其余”可能意味着高级>中列出的那些。 (附加)IP Addesses。

DNS不一定知道那些。