2013-02-10 134 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; 
    } 
} 
相关问题