.net 获取计算机上的所有IP地址

i86rm4rw  于 2023-02-26  发布在  .NET
关注(0)|答案(6)|浏览(150)

如何获取附加到运行应用程序(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,这会在主服务器上公开它吗?

r8uurelv

r8uurelv1#

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("");
}
oug3syen

oug3syen2#

我想这个例子应该对你有帮助。

// 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地址。"

tkclm6bt

tkclm6bt3#

为什么不直接绑定到0.0.0.0?
这样你就能监听所有的IP

xwmevbvl

xwmevbvl4#

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

yhqotfr8

yhqotfr85#

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

wswtfjt76#

我认为OP是在询问如何获取本地NIC上的所有地址,而不仅仅是DNS已知的地址。他所说的主要地址可能是指适配器属性中“使用以下IP地址”下的主地址,而“其余地址”可能是指高级〉(附加)IP地址中列出的地址。
DNS不一定知道这些。

相关问题