Frage Irgendeine Möglichkeit, das "Internet" in Windows mit c # auszuschalten?


Ich suche nach Hinweisen zu APIs in c #, die es mir ermöglichen, meine Internetverbindung zu steuern, indem ich die Verbindung ein- und ausschalte.

Ich möchte eine kleine Konsolen-App schreiben, mit der ich meinen Zugang ein- und ausschalten kann, so dass die Produktivität in die Höhe schnellen kann :) (und dabei etwas lernen)

Vielen Dank !!


25
2017-08-07 02:16


Ursprung


Antworten:


Wenn Sie Windows Vista verwenden, können Sie die integrierte Firewall verwenden, um jeglichen Internetzugang zu blockieren.

Der folgende Code erstellt eine Firewallregel, die alle ausgehenden Verbindungen auf allen Netzwerkadaptern blockiert:

using NetFwTypeLib; // Located in FirewallAPI.dll
...
INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FWRule"));
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
firewallRule.Description = "Used to block all internet access.";
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT;
firewallRule.Enabled = true;
firewallRule.InterfaceTypes = "All";
firewallRule.Name = "Block Internet";

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Add(firewallRule);

Entfernen Sie dann die Regel, wenn Sie den Internetzugang wieder zulassen möchten:

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Remove("Block Internet");

Dies ist eine geringfügige Änderung von anderem Code, den ich verwendet habe, so kann ich keine Garantien geben, dass es funktioniert. Vergessen Sie nicht, dass Sie Windows Vista (oder höher) und Administratorrechte benötigen, damit dies funktioniert.

Link zum Firewall-API Dokumentation.


44
2017-08-07 05:26



Es gibt tatsächlich eine Vielzahl von Möglichkeiten, um Ihren Internet-Zugang zu deaktivieren (lesen: brechen), aber ich denke, die einfachste wäre, die Netzwerk-Schnittstelle, die Sie mit dem Internet verbindet zu drehen.

Hier ist ein Link für den Einstieg: Identifizieren der aktiven Netzwerkschnittstelle


4
2017-08-07 02:25



Das benutze ich gerade (meine Idee, keine api):

System.Diagnostics;    

void InternetConnection(string str)
{
    ProcessStartInfo internet = new ProcessStartInfo()
    {
        FileName = "cmd.exe",
        Arguments = "/C ipconfig /" + str,
        WindowStyle = ProcessWindowStyle.Hidden
    };  
    Process.Start(internet);
}

Vom Internet trennen:  InternetConnection("release");
Mit dem Internet verbinden:  InternetConnection("renew");

Trennen wird nur den Zugriff auf das Internet entfernen (es wird ein Warnsymbol im Wifi-Symbol angezeigt). Die Verbindung kann fünf Sekunden oder länger dauern.

Außerhalb des Themas:
In jedem Fall solltest du überprüfen, ob du verbunden bist oder nicht (wenn du den Code oben verwendest), ich schlage das besser vor:

System.Net.NetworkInformation;

public static bool CheckInternetConnection()
{
   try
   {
       Ping myPing = new Ping();
       String host = "google.com";
       byte[] buffer = new byte[32];
       int timeout = 1000;
       PingOptions pingOptions = new PingOptions();
       PingReply reply = myPing.Send(host, timeout, buffer, pingOptions);
            return (reply.Status == IPStatus.Success);
    }
    catch (Exception)
    {
       return false;
    }
}

2
2018-05-14 11:48



Hier ist ein Beispielprogramm, das es WMI-Verwaltungsobjekte verwendet.

Im Beispiel ziele ich auf meinen drahtlosen Adapter ab, indem ich nach Netzwerkadaptern suche, deren Name "Wireless" enthält. Sie könnten einen Teilstring herausfinden, der den Namen des Adapters identifiziert, auf den Sie zielen (Sie können die Namen auf diese Weise erhalten) ipconfig /all in einer Befehlszeile). Das Übergeben einer Teilzeichenfolge würde dazu führen, dass dies durch alle Adapter geht, was ziemlich streng ist. Sie müssen Ihrem Projekt einen Verweis auf System.Management hinzufügen.

using System;
using System.Management;

namespace ConsoleAdapterEnabler
{
    public static class NetworkAdapterEnabler
    {
        public static ManagementObjectSearcher GetWMINetworkAdapters(String filterExpression = "")
        {
            String queryString = "SELECT * FROM Win32_NetworkAdapter";
            if (filterExpression.Length > 0)
            {
                queryString += String.Format(" WHERE Name LIKE '%{0}%' ", filterExpression);
            }
            WqlObjectQuery query = new WqlObjectQuery(queryString);
            ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher(query);
            return objectSearcher;
        }

        public static void EnableWMINetworkAdapters(String filterExpression = "")
        {
            foreach (ManagementObject adapter in GetWMINetworkAdapters(filterExpression).Get())
            {
                //only enable if not already enabled
                if (((bool)adapter.Properties["NetEnabled"].Value) != true)
                {
                    adapter.InvokeMethod("Enable", null);
                }
            }
        }

        public static void DisableWMINetworkAdapters(String filterExpression = "")
        {
            foreach (ManagementObject adapter in GetWMINetworkAdapters(filterExpression).Get())
            {
                //If enabled, then disable
                if (((bool)adapter.Properties["NetEnabled"].Value)==true)
                {
                    adapter.InvokeMethod("Disable", null);
                }
            }
        }

    }
    class Program
    {
        public static int Main(string[] args)
        {
            NetworkAdapterEnabler.DisableWMINetworkAdapters("Wireless");

            Console.WriteLine("Press any key to continue");
            var key = Console.ReadKey();

            NetworkAdapterEnabler.EnableWMINetworkAdapters("Wireless");

            Console.WriteLine("Press any key to continue");
            key = Console.ReadKey();
            return 0;
        }
    }
}

1
2017-08-13 23:42



public static void BlockingOfData()
{
    INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));

    firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, NET_FW_ACTION_.NET_FW_ACTION_BLOCK);
    firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, NET_FW_ACTION_.NET_FW_ACTION_BLOCK);
    firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, NET_FW_ACTION_.NET_FW_ACTION_BLOCK);
}

-3
2017-07-12 11:28