2013-02-10 86 views
4

我正在嘗試使用C#編寫一個程序作爲我公司的多用途工具。我們希望使用此工具的其中一項內容是確定IPv6是否啓用/綁定到Windows 7計算機上的本地連接網絡適配器。我不是在尋找它的地址,只是爲了知道它是否在該適配器上啓用或禁用。我不確定如何編碼。從我已經能夠在網上找到的,似乎我應該使用System.Net.Configuration和Ipv6Element來檢查它是否啓用,但我不知道如何對其進行編碼。我希望能夠顯示它是否在文本框中啓用或禁用,所以我猜我會使用布爾值。有人能指出我在這方面的正確方向嗎?謝謝!檢查Windows 7上是否啓用了IPv6使用C#

+0

禁用Win7上的ipv6支持需要大量手術,它需要手動編輯註冊表。 http://support.microsoft.com/kb/929852 – 2013-02-10 12:53:52

回答

5

您可以測試使用該屬性的操作系統是否支持IPv6:

bool supportsIpV6 = System.Net.Sockets.Socket.OSSupportsIPv6; 
+0

謝謝你的建議,hmemcpy。當我用if/else語句嘗試時,即使在取消選中本地連接屬性中的框時,它也總是返回語句的真實部分。我想我的問題可能不是很具體。我不知道我的操作系統是否支持IPv6,因爲我知道它是啓用/綁定到網絡適配器的。對不起,我更新了我的問題,以便更準確。 – 2013-02-10 15:23:23

+0

這是我嘗試基於你的建議的代碼.... bool supportsIpV6 = System.Net.Sockets.Socket.OSSupportsIPv6; if(supportsIpV6 == true) { ipStatusTextBox.Text =「IPv4 and IPv6」; } else if(supportsIpV6 == false) { ipStatusTextBox.Text =「僅限IPv4」; } – 2013-02-10 15:28:07

+0

請注意,這不適用於Windows XP - 事實上它會拋出一個非常討厭的錯誤(「程序入口點_except_handler4_common無法位於動態鏈接庫msvcrt.dll中」) – Sean 2013-07-11 09:12:49

0

您可以查詢你問什麼的(如果啓用IPv6或特定網絡適配器禁用)用下面的代碼使用System.Net.NetworkInformation命名空間:

using System.Net.NetworkInformation; 

// ... 

NetworkInterface[] allInterfaces = NetworkInterface.GetAllNetworkInterfaces(); 
NetworkInterface firstInterface = allInterfaces[0]; 
bool interfaceSupportsIPv6 = firstInterface.Supports(NetworkInterfaceComponent.IPv6); 

文檔在MSDN:Link

0

我已經使用這個碼T o測試它。注意它測試IPV6是否啓用,而不是網卡是否兼容IPV6:

public static bool InterfaceHasIpv6Enabled(NetworkInterface @interface) 
{ 
    try 
    { 
    var properties = @interface.GetIPProperties().GetIPv6Properties(); 
    return properties.Index > -999; 
    } 
    catch (System.Net.NetworkInformation.NetworkInformationException) 
    { 
    return false; 
    } 
    catch (Exception ex) 
    { 
    throw ex; 
    } 
} 
相關問題