Любой способ отключить "Интернет" в Windows, используя C #? - PullRequest
25 голосов
/ 07 августа 2009

Я ищу указатели на API в c #, которые позволили бы мне контролировать свое интернет-соединение, включая и выключая соединение.

Я хочу написать небольшое консольное приложение, которое позволит мне включать и выключать мой доступ, что повышает производительность до взлета :) (а также чему-то научится)

Спасибо !!

Ответы [ 5 ]

44 голосов
/ 07 августа 2009

Если вы используете Windows Vista, вы можете использовать встроенный брандмауэр, чтобы заблокировать любой доступ в Интернет.

Следующий код создает правило брандмауэра, которое блокирует любые исходящие соединения на всех ваших сетевых адаптерах:

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

Затем удалите правило, если хотите снова разрешить доступ в Интернет:

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

Это небольшая модификация некоторого другого кода, который я использовал, поэтому я не могу дать никаких гарантий, что он будет работать. Еще раз, имейте в виду, что для этого вам понадобятся Windows Vista (или более поздняя версия) и права администратора.

Ссылка на документацию API брандмауэра .

4 голосов
/ 07 августа 2009

На самом деле существует множество способов отключить (читай: прервать) доступ к Интернету, но я думаю, что самым простым будет отключить сетевой интерфейс, соединяющий вас с Интернетом.

Вот ссылка для начала: Идентификация активного сетевого интерфейса

2 голосов
/ 14 мая 2016

Это то, что я сейчас использую (моя идея, а не API):

System.Diagnostics;    

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

Отключение от интернета: InternetConnection("release");
Подключение к интернету: InternetConnection("renew");

Отключение просто приведет к удалению доступа к Интернету (на значке wifi будет отображаться значок предупреждения). Подключение может занять пять секунд или более.

Не по теме :
В любых случаях вы можете захотеть проверить, подключены ли вы (если вы используете код выше), я бы лучше предложил это:

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;
    }
}
1 голос
/ 14 августа 2016

Вот пример программы, которая делает это, используя объекты управления WMI.

В этом примере я нацеливаюсь на мой беспроводной адаптер, ища сетевые адаптеры с названием «Wireless» в их названии. Вы могли бы выяснить некоторую подстроку, которая идентифицирует имя адаптера, на который вы нацелены (вы можете получить имена, выполнив ipconfig /all в командной строке). Если не передать подстроку, это может пройти через все адаптеры, что довольно серьезно. Вам нужно добавить ссылку на System.Management в свой проект.

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;
        }
    }
}
0 голосов
/ 12 июля 2017
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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...