Как отключить / включить сетевое соединение в C#

В основном я провожу некоторые тесты производительности и не хочу, чтобы внешняя сеть была фактором перетаскивания. Я ищу способы отключить сетевую LAN. Каков эффективный способ сделать это программно? Меня интересует C#. Было бы круто, если бы у кого-нибудь есть фрагмент кода, который поможет понять суть дела.

Что-то похожее has been discussed.
hayalci 06.10.2008 04:08

Да, но здесь есть реальный рабочий код C#.

Colin 10.01.2013 04:37

Пожалуйста, перейдите по ссылке ниже. это может вам помочь. http://stackoverflow.com/questions/3053372/programmatically-‌ включить-отключить-подключение

Buddhika Samith 10.11.2016 09:28

Хороший вопрос, кажется, имеет долгосрочную актуальность. Голосование за вопрос о ценности. Много хороших ответов, возможно, лучше не называть ни одного ответа. Иногда проще - лучше, и если вы просто хотите переключить сеть, netsh в файле .bat на рабочем столе может помочь. Но я пришел сюда и за примерами кода для обнаружения и переключения соединения, так что код здесь отличный - даже 6 лет спустя.

TonyG 09.01.2018 21:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
27
4
45 556
7

Ответы 7

Нашел эту ветку, пока искал то же самое, так что вот ответ :)

Лучший метод, который я тестировал на C#, использует WMI.

http://www.codeproject.com/KB/cs/EverythingInWmi02.aspx

Win32_NetworkAdapter на msdn

Фрагмент C#: (System.Management должна указываться в решении и при использовании объявлений)

SelectQuery wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");
ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher(wmiQuery);
foreach (ManagementObject item in searchProcedure.Get())
{
    if (((string)item["NetConnectionId"]) == "Local Network Connection")
    {
       item.InvokeMethod("Disable", null);
    }
}

Обратите внимание, что мне пришлось запускать это как администратор (InvokeMethod () не возвращал ошибку, когда я запускал его как peon).

Colin 10.01.2013 04:36

Это выглядит красиво, но не работает для универсальных приложений Windows.

Adam Ehven 11.08.2020 00:45

Используя команду netsh, вы можете включать и отключать «Подключение по локальной сети»

  interfaceName is “Local Area Connection”.

  static void Enable(string interfaceName)
    {
     System.Diagnostics.ProcessStartInfo psi =
            new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" enable");
        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo = psi;
        p.Start();
    }

    static void Disable(string interfaceName)
    {
        System.Diagnostics.ProcessStartInfo psi =
            new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" disable");
        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo = psi;
        p.Start();
    }

После нескольких часов мучений с WMI (очевидно, не каждый адаптер предлагает команду Disable или что-то в этом роде), netsh сработал без сбоев с первой попытки.

heltonbiker 15.01.2015 21:05

Имейте в виду, что это также необходимо запускать от имени администратора.

Patartics Milán 03.11.2015 21:34

Это сработало для меня! Я думал, что это будет сложно, но вы облегчите мне задачу. Спасибо.

Matarata 26.02.2016 23:05

Работал нормально. Предпочитайте этот метод method для / release, поскольку я не хочу менять IP-адрес. Икс

TinyRacoon 09.03.2021 12:14

В VB.Net вы также можете использовать его для переключения подключения по локальной сети

Примечание: я использую его в Windows XP, здесь он работает нормально. но в Windows 7 это не работает должным образом.

  Private Sub ToggleNetworkConnection()

    Try


        Const ssfCONTROLS = 3


        Dim sConnectionName = "Local Area Connection"

        Dim sEnableVerb = "En&able"
        Dim sDisableVerb = "Disa&ble"

        Dim shellApp = CreateObject("shell.application")
        Dim WshShell = CreateObject("Wscript.Shell")
        Dim oControlPanel = shellApp.Namespace(ssfCONTROLS)

        Dim oNetConnections = Nothing
        For Each folderitem In oControlPanel.items
            If folderitem.name = "Network Connections" Then
                oNetConnections = folderitem.getfolder : Exit For
            End If
        Next


        If oNetConnections Is Nothing Then
            MsgBox("Couldn't find 'Network and Dial-up Connections' folder")
            WshShell.quit()
        End If


        Dim oLanConnection = Nothing
        For Each folderitem In oNetConnections.items
            If LCase(folderitem.name) = LCase(sConnectionName) Then
                oLanConnection = folderitem : Exit For
            End If
        Next


        If oLanConnection Is Nothing Then
            MsgBox("Couldn't find '" & sConnectionName & "' item")
            WshShell.quit()
        End If


        Dim bEnabled = True
        Dim oEnableVerb = Nothing
        Dim oDisableVerb = Nothing
        Dim s = "Verbs: " & vbCrLf
        For Each verb In oLanConnection.verbs
            s = s & vbCrLf & verb.name
            If verb.name = sEnableVerb Then
                oEnableVerb = verb
                bEnabled = False
            End If
            If verb.name = sDisableVerb Then
                oDisableVerb = verb
            End If
        Next



        If bEnabled Then
            oDisableVerb.DoIt()
        Else
            oEnableVerb.DoIt()
        End If


    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub

Я изменил лучшее проголосованное решение с Камрул Хасан на один метод и добавил, чтобы дождаться завершения процесса, потому что мой код модульного теста работает быстрее, чем процесс, отключающий соединение.

private void Enable_LocalAreaConection(bool isEnable = true)
    {
        var interfaceName = "Local Area Connection";
        string control;
        if (isEnable)
            control = "enable";
        else
            control = "disable";
        System.Diagnostics.ProcessStartInfo psi =
               new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" " + control);
        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo = psi;
        p.Start();
        p.WaitForExit();
    }

Для Windows 10 Измените это: для диабла ("netsh", "interface set interface name =" + interfaceName + "admin = DISABLE") и для включения ("netsh", "interface set interface name =" + interfaceName + "admin = ENABLE") И использовать программу как Администратор

    static void Disable(string interfaceName)
    {

        //set interface name = "Ethernet" admin=DISABLE
        System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface name = " + interfaceName + " admin=DISABLE");
        System.Diagnostics.Process p = new System.Diagnostics.Process();

        p.StartInfo = psi;
        p.Start();
    }

    static void Enable(string interfaceName)
    {
        System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface name = " + interfaceName + " admin=ENABLE");
        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo = psi;
        p.Start();
    }

И используйте Программу как Администратор !!!!!!

Если вы ищете очень простой способ сделать это, вот вам:

    System.Diagnostics.Process.Start("ipconfig", "/release"); //For disabling internet
    System.Diagnostics.Process.Start("ipconfig", "/renew"); //For enabling internet

Убедитесь, что вы запускаете как администратор. Надеюсь, вы нашли это полезным!

У меня работает даже не как администратор

svstnv 06.03.2020 12:47

Лучшее решение - отключить все сетевые адаптеры, независимо от имени интерфейса, отключить и включить все сетевые адаптеры с помощью этого фрагмента (для запуска необходимы права администратора, иначе ЕГО НЕ РАБОТАЕТ):

  static void runCmdCommad(string cmd)
    {
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        //startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = $"/C {cmd}";
        process.StartInfo = startInfo;
        process.Start();
    }
   static void DisableInternet(bool enable)
    {
        string disableNet = "wmic path win32_networkadapter where PhysicalAdapter=True call disable";
        string enableNet = "wmic path win32_networkadapter where PhysicalAdapter=True call enable";
        runCmdCommad(enable ? enableNet :disableNet);
    }

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