codeproject apagar c#

apagar - codeproject c#



¿Alguna manera de apagar el "internet" en Windows usando c#? (5)

Estoy buscando punteros hacia las API en c # que me permitirán controlar mi conexión a Internet activando y desactivando la conexión.

Quiero escribir una pequeña aplicación de consola que me permita activar y desactivar mi acceso, permitiendo que la productividad se dispare :) (además de aprender algo en el proceso)

Gracias !!


Aquí hay un programa de ejemplo que lo hace usando objetos de administración de WMI.

En el ejemplo, apuntar a mi adaptador inalámbrico buscando adaptadores de red que tengan "Wireless" en su nombre. Puede averiguar alguna subcadena que identifique el nombre del adaptador al que se dirige (puede obtener los nombres haciendo ipconfig /all en una línea de comando). Si no se pasa una subcadena, esto pasará por todos los adaptadores, lo que es bastante grave. Deberá agregar una referencia a System.Management para su proyecto.

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; } } }


En realidad, hay una infinidad de formas de desactivar (Leer: interrumpir) su acceso a Internet, pero creo que la más simple sería cambiar la interfaz de red que lo conecta a Internet.

Aquí hay un enlace para comenzar: Identificar la interfaz de red activa


Esto es lo que estoy usando actualmente (mi idea, no una API):

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

Desconectarse de internet: InternetConnection("release");
Conéctese a internet: InternetConnection("renew");

Desconectarse simplemente eliminará el acceso a internet (mostrará un ícono de precaución en el ícono de wifi). La conexión puede demorar cinco segundos o más.

Fuera del tema :
En cualquier caso, es posible que desee comprobar si está conectado o no (cuando usa el código anterior), mejor sugiero esto:

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; } }


Si usa Windows Vista, puede usar el firewall incorporado para bloquear cualquier acceso a Internet.

El siguiente código crea una regla de firewall que bloquea las conexiones salientes en todos sus adaptadores de red:

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);

A continuación, elimine la regla cuando desee volver a permitir el acceso a Internet:

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

Esta es una pequeña modificación de algún otro código que he usado, por lo que no puedo garantizar que funcione. Una vez más, tenga en cuenta que necesitará Windows Vista (o posterior) y privilegios administrativos para que esto funcione.

Enlace a la documentación de la API de firewall


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); }