我有一個運行良好的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
}
}
,你會知道如何添加skipassource =真:
也看到了嗎?目前使用ManagementObject添加新地址 – user815809 2012-10-22 10:47:43
對不起,我不熟悉如何做到這一點。儘管如此,可能會提出一個很好的問題。 – 2012-10-22 17:57:59
問這裏http://stackoverflow.com/questions/12973074/how-to-programmatically-set-skipassource-true-using-c-net – user815809 2012-10-23 16:17:26