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
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
You can test whether the OS supports IPv6 by using this property:
bool supportsIpV6 = System.Net.Sockets.Socket.OSSupportsIPv6;
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;
}
}