2013-02-10 2 views
4

Я пытаюсь написать программу с использованием C#, чтобы действовать как многофункциональный инструмент для моей компании. Одна из вещей, которые мы хотели бы в этом инструменте, - определить, включен ли IPv6/привязан к сетевому адаптеру локальной сети на наших машинах Windows 7. Я не ищу, чтобы у него был адрес, просто чтобы узнать, включен ли он или нет на этом адаптере. Я не уверен, как это кодировать. Из того, что мне удалось найти в Интернете, кажется, я должен использовать System.Net.Configuration и Ipv6Element, чтобы проверить, включено ли это, но я понятия не имею, как его кодировать. Я хотел бы иметь возможность отображать, если он включен или отключен в текстовом поле, поэтому я предполагаю, что я буду использовать логические значения. Может ли кто-нибудь указать мне в правильном направлении? Благодаря!Проверка наличия IPv6 в Windows 7 с использованием C#

+0

Отключение ipv6 поддержки на Win7 занимает значительную операцию, он требует редактирования реестра вручную. http://support.microsoft.com/kb/929852 –

ответ

5

Вы можете проверить, поддерживает ли ОС IPv6 с помощью этого свойства:

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

Благодарим за предложение hmemcpy. Когда я попробовал это с инструкцией if/else, он всегда возвращал истинную часть инструкции, даже когда я снял флажок в свойствах подключения к локальной сети. Я думаю, что я, возможно, не был очень конкретным с моим вопросом. Мне не очень интересно знать, поддерживает ли моя ОС IPv6, поскольку я знаю, что она включена/привязана к сетевому адаптеру. Извините за путаницу, я уточнил свой вопрос, чтобы быть более точным. –

+0

Это код, который я пробовал на основе вашего предложения .... bool поддерживаетIpV6 = System.Net.Sockets.Socket.OSSupportsIPv6; if (supportsIpV6 == true) { ipStatusTextBox.Text = "IPv4 и IPv6"; } else if (supportsIpV6 == false) { ipStatusTextBox.Text = "Только IPv4"; } –

+0

Обратите внимание, что это не работает на Windows XP - на самом деле это вызывает очень неприятную ошибку («Точка входа процедуры _except_handler4_common не может быть расположена в библиотеке динамических ссылок msvcrt.dll») – Sean

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

Я использовал этот код т 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; 
    } 
} 
Смежные вопросы