Программно отключить подключение к сети - PullRequest
10 голосов
/ 23 ноября 2011

Есть ли способ программно и временно отключить сетевое подключение в .NET 4.0?

Я знаю, что могу получить текущее состояние сетевого подключения, выполнив это ...

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

но для целей тестирования я хотел бы проверить поведение моего приложения, когда оно теряет сетевое подключение (без физического отключения сетевого кабеля).

Спасибо, Крис.

Ответы [ 2 ]

16 голосов
/ 23 ноября 2011

Вы можете сделать это с WMI.Вот тот, который мы используем для отключения физического адаптера для тестирования этих типов сценариев.

using System.Management;
using System.Linq;

namespace DisableNIC
{
    internal static class Program
    {
        private static void Main()
        {
            var wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter " +
                                            "WHERE NetConnectionId != null " +
                                              "AND Manufacturer != 'Microsoft' ");
            using (var searcher = new ManagementObjectSearcher(wmiQuery))
            {
                foreach (var item in searcher.Get().OfType<ManagementObject>())
                {
                    if ((string) item["NetConnectionId"] != "Local Area Connection")
                        continue;

                    using (item)
                    {
                        item.InvokeMethod("Disable", null);
                    }
                }
            }
        }
    }
}

Вы не указали ОС, но это работает в Windows 7 и Windows 8.

Обратите внимание , что для этого вам понадобится быть администратором.

1 голос
/ 06 мая 2016

если вы используете «Управляемый Wifi API», вы можете просто удалить профиль. Это сработало для меня.

WlanClient client = new WlanClient();

WlanClient.WlanInterface m_WlanInterface = client.Interfaces.Where(i => i.InterfaceDescription.Contains(InterfaceIdentifierString)).First();
m_WlanInterface.DeleteProfile(ConnectionProfileString);

Если вам необходимо повторно подключиться к этой сети, обязательно сохраните профиль xml:

string xmlString = m_WlanInterface.GetProfileXml(ConnectionProfileString)

Тогда вы можете использовать его снова

 m_WlanInterface.SetProfile(Wlan.WlanProfileFlags.AllUser, xmlString, true);
 m_WlanInterface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, ConnectionProfileString);
...