Есть ли способ получить список отключенных / включенных сетевых интерфейсов в C#

Я программирую небольшой скрипт для изменения IPv4-адреса определенного сетевого интерфейса Wireless80211 или Ethernet. Пока все работает нормально. Сценарий устанавливает IPv4 с помощью командной строки и netsh (для управления им с помощью C# я использую System.Diagnostics). Я хочу добавить функцию, которая позволяет сценарию отключать или включать все сетевые интерфейсы Wireless80211 и Ethernet (без определенного), которые вы можете найти в "Панели управления> Сеть и Интернет> Сетевые подключения".

Сценарий в основном используется для ArtNet для DMX, чтобы автоматически подготовить все для использования ArtNet (для людей, которые ничего не знают о Панели управления и для автоматизации рабочего процесса). Я уже попробовал это с System.Net.NetworkInformation пространство имен, но я нашел только способ получить включенные сетевые интерфейсы. Как только я отключаю интерфейс System.Net.NetworkInformation не показывает этот интерфейс.

2 ответа

Решение

Я не знал, что NetworkInterface.GetAllNetworkInterfaces() не возвращает отключенные интерфейсы.

В любом случае, вы можете попробовать использовать API WMI через System.Management.dll это доступно в.NET Framework (вы должны добавить эту ссылку в ваш проект), я провел тест, и он позволяет вам взаимодействовать даже с отключенными сетевыми интерфейсами.

Следующий пример дает вам представление о том, как работать с WMI через этот API, я в значительной степени извлек это из документации:

using System;
using System.Management;
...
void ListNetworkAdapters()
{
    var query = new ObjectQuery("SELECT * FROM Win32_NetworkAdapter");

    using (var searcher = new ManagementObjectSearcher(query))
    {
        var queryCollection = searcher.Get();

        foreach (var m in queryCollection)
        {
            Console.WriteLine("ServiceName : {0}", m["Name"]);
            Console.WriteLine("MACAddress : {0}", m["Description"]);
            Console.WriteLine();
        }

        Console.ReadLine();
    }
}

Документацию можно найти здесь: https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-networkadapter

NetworkInterface.GetAllNetworkInterfaces()

Затем проверьте свойство OperationalStatus

https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.networkinterface?view=netframework-4.7.2

Другие вопросы по тегам