获取机器上的所有 IP 地址
Posted
技术标签:
【中文标题】获取机器上的所有 IP 地址【英文标题】:Get All IP Addresses on Machine 【发布时间】:2011-07-13 09:43:20 【问题描述】:如何获取附加到运行我的应用程序(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,这会在主服务器上公开它吗?
【问题讨论】:
什么是“主 IP”地址?不是所有的 IP 地址生来都是平等的吗? AddressList 是一个集合,您只使用第一个元素。该集合是否总是为您生成单个元素? 【参考方案1】: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("");
【讨论】:
这是一个有价值的答案。 使用以下方法识别 IPv4 地址:addr.Address.AddressFamily == AddressFamily.InterNetwork【参考方案2】:我认为这个例子应该对你有所帮助。
// 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 地址。"
【讨论】:
这通常会返回您想要的内容,但有时如果系统上的 DNS 配置错误,您可能会遇到 Dns.GetHostByName 的一些问题。 这个答案实际上在我的机器上不起作用。它只返回 127.0.0.1,即使我有一个具有真实 IP 地址的活动 Wifi 连接。 这个答案有一个bug,它不会返回所有本地机器IP地址,因为IP地址不需要绑定到DNS主机。在下面的答案中使用 NetworkInterface.GetAllNetworkInterfaces 应该是公认的答案。请勿使用此代码!【参考方案3】:为什么不直接绑定到 0.0.0.0 呢? 这样你就可以监听所有 ips
【讨论】:
我正在寻找这个来将我的 WCF 服务绑定到所有 IP。谢谢!【参考方案4】:您可能应该绑定到0.0.0.0:8000
,这将在所有可用的 IP 地址上公开它,并且仅在用户/管理员要求时才绑定到特定的 IP 地址。
【讨论】:
【参考方案5】:IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
【讨论】:
请解释为什么这段代码可以帮助 OP 解决他们的问题。 谢谢!!这就是将所有 ip 添加到字符串列表中【参考方案6】:我认为 OP 是在询问如何获取本地 NIC 上的所有地址,而不仅仅是 DNS 已知的那些地址。 主要他可能是指适配器属性中“使用以下 IP 地址”下的主要地址,而“其余”可能是指高级 >(附加)IP 地址中列出的那些。
DNS 不一定知道这些。
【讨论】:
我想它更适合作为评论。但我没有投反对票。以上是关于获取机器上的所有 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章