Есть ли способ получить список отключенных / включенных сетевых интерфейсов в 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