2012-03-29 89 views
2

我有一個運行良好的Windows 2003下,獲得綁定到服務器的IP地址列表中的一些現有代碼:如何獲取Windows 2008和.NET中包含「skipassource」地址的系統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 
    } 
} 
+0

,你會知道如何添加skipassource =真:

也看到了嗎?目前使用ManagementObject添加新地址 – user815809 2012-10-22 10:47:43

+0

對不起,我不熟悉如何做到這一點。儘管如此,可能會提出一個很好的問題。 – 2012-10-22 17:57:59

+1

問這裏http://stackoverflow.com/questions/12973074/how-to-programmatically-set-skipassource-true-using-c-net – user815809 2012-10-23 16:17:26

回答

2

skipassource旨在不包括在DNS解析系統的IP地址,所以我認爲你必須找到另一種方式比Dns.GetHostEntry

你嘗試在看System.Net.NetworkInformation命名空間?

我想如果你通過GetAllNetworkInterfaces通過適配器循環,然後調用GetIPProperties獲得適配器的IP屬性,然後檢查UnicastAddresses你可以建立一個IP地址列表。雖然沒有測試過。使用.NET添加地址時 http://msdn.microsoft.com/de-de/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx

+0

謝謝,這個作品!我正在用我的最終代碼更新我的問題。 – 2012-04-03 18:25:15

+0

@aKzenT,你知道如何在使用.NET添加地址時添加skipassource = true嗎?目前使用ManagementObject添加新地址。 – user815809 2012-10-22 10:46:56

+0

@ user815809對不起,不知道該怎麼做。我建議爲此打開一個單獨的問題,如果谷歌不給你任何結果... – aKzenT 2012-10-22 14:19:49