如何获得Windows 2008和.NET中包含“skipassource”地址的系统IP地址列表?

我有一些现有的代码在Windows 2003下工作正常,以获取绑定到服务器的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命令netsh int ipv4 add address并指定了skipassource=true标志。

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

(如果你很好奇, skipassource=true标志被设置,因为Windows 2008在networking中引入了新的行为,允许它决定你认为哪个IP地址是“主要的”,其余的应用程序依赖于我们能够select主要的。在Windows 2008中唯一的方法是将所有其他地址标记为skipassource=true 。)

编辑这个问题现在只是为了满足我的好奇心,因为我已经解决了这个问题。 我上面的原始代码是用来运行在服务器上的所有IP,看看它是否find一个匹配我正在寻找一个特定的IP。 我现在检查一下,看看我所在的服务器是否已经在运行一个监听特定IP地址/端口的服务,所以我不再需要遍历所有的IP。 但是,如果对原始问题有答案,我还是有兴趣的。

编辑感谢@aKzenT的解决scheme。 我现在使用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属性,然后检查你可以建立一个IP地址列表的UnicastAddresses 。 虽然没有测试过。

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