Checking if IPv6 is enabled on Windows 7 using C#

2019-02-24 06:56发布

问题:

I am trying to write a program using C# to act as a multipurpose tool for my company. One of the things we would like in this tool is to determine if IPv6 is enabled/binded to the local area connection network adapter on our Windows 7 machines. I'm not looking for it to have an address, just to know if it enabled or disabled on that adapter. I am unsure as to how to code this. From what I've been able to find online, it seems I should be using System.Net.Configuration and Ipv6Element to check if it is enabled, but I have no idea how to code it. I would like to be able to display if it is enabled or disabled in a text box, so I'm guessing I'd use Boolean values. Could someone point me in the right direction on this? Thanks!

回答1:

You can test whether the OS supports IPv6 by using this property:

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


回答2:

You can query for exactly what you asked for (if IPv6 is enabled or disabled for a specific network adapter) with the following code using the System.Net.NetworkInformation namespace:

using System.Net.NetworkInformation;

// ...

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

Documentation on MSDN: Link



回答3:

I have used this code to test it. Notice that it tests if the IPV6 is enabled, and not if the Network Card is IPV6 compatible:

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;
  }
}


标签: c# ipv6