gpt4 book ai didi

c# - 如何获取 Windows 2008 和 .NET 中包含 "skipassource"地址的系统 IP 地址列表?

转载 作者:可可西里 更新时间:2023-11-01 10:27:39 27 4
gpt4 key购买 nike

我有一些在 Windows 2003 下运行良好的现有代码,用于获取绑定(bind)到服务器的 IP 地址列表:

foreach (IPAddress addr in (Dns.GetHostEntry(Dns.GetHostName())).AddressList)
{
// Code here to act on each address
}

当我在我们的 Windows 2008 服务器上运行这段代码时,它只返回一个 IP 地址。经过进一步调查,似乎机器正在监听的所有其余 IP 地址都是使用 netsh int ipv4 add address 命令并指定 skipassource=true 添加的旗帜。

有没有办法在我的查询中包含这些地址,即返回服务器上的所有地址?

(如果您好奇的话,设置 skipassource=true 标志是因为 Windows 2008 在网络中引入了新行为,允许它决定将您的哪些 IP 地址视为“主要”,而我们的其余应用程序依赖于我们能够选择主地址。在 Windows 2008 中执行此操作的唯一方法是将所有其他地址标记为 skipassource=true。)

编辑 这个问题现在只是为了满足我的好奇心,因为我已经解决了这个问题。我上面的原始代码用于遍历服务器上的所有 IP,并查看它是否找到了与我要查找的特定 IP 的匹配项。我现在检查我所在的服务器是否已经在运行监听该特定 IP 地址/端口的服务,因此我不再需要遍历所有 IP。尽管如此,我还是很想知道是否有原始问题的答案。

编辑 感谢@aKzenT 提供的解决方案。我现在使用 NetworkInteface.GetAllNetworkInterfaces() 来访问所有 IP,而不是 Dns.GetHostEntry()。我的最终代码如下所示:

foreach (NetworkInterface netface in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (UnicastIPAddressInformation uni in netface.GetIPProperties().UnicastAddresses)
{
IPAddress addr = uni.Address;
// Code here to act on each address
}
}

最佳答案

skipassource 旨在不在 DNS 名称系统中包含 IP 地址,因此我认为您必须找到除 Dns.GetHostEntry

之外的其他方法

您是否尝试查看 System.Net.NetworkInformation 命名空间?

我认为如果您通过 GetAllNetworkInterfaces 遍历适配器,然后调用 GetIPProperties 获取适配器的 IP 属性,然后检查 UnicastAddresses您可以建立一个 IP 地址列表。虽然没有测试。

另见: http://msdn.microsoft.com/de-de/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx

关于c# - 如何获取 Windows 2008 和 .NET 中包含 "skipassource"地址的系统 IP 地址列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9934619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com