有没有办法扭转这种局面;“互联网关闭”;在windows中使用c#?

有没有办法扭转这种局面;“互联网关闭”;在windows中使用c#?,c#,C#,我正在寻找指向c#中API的指针,它允许我通过打开和关闭连接来控制我的Internet连接 我想写一个小的控制台应用程序,它可以让我打开和关闭我的访问权限,让我的工作效率突飞猛进:)(并在这个过程中学习一些东西) 谢谢 实际上有无数种方法可以关闭(阅读:中断)您的internet访问,但我认为最简单的方法是打开连接您到internet的网络接口 以下是一个让您开始的链接: 如果您使用的是Windows Vista,则可以使用内置防火墙阻止任何internet访问 以下代码创建防火墙规则,阻止所有

我正在寻找指向c#中API的指针,它允许我通过打开和关闭连接来控制我的Internet连接


我想写一个小的控制台应用程序,它可以让我打开和关闭我的访问权限,让我的工作效率突飞猛进:)(并在这个过程中学习一些东西)


谢谢

实际上有无数种方法可以关闭(阅读:中断)您的internet访问,但我认为最简单的方法是打开连接您到internet的网络接口

以下是一个让您开始的链接:

如果您使用的是Windows Vista,则可以使用内置防火墙阻止任何internet访问

以下代码创建防火墙规则,阻止所有网络适配器上的任何传出连接:

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);
然后,如果要再次允许internet访问,请删除该规则:

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Remove("Block Internet");
这是对我使用过的其他一些代码的轻微修改,所以我不能保证它能正常工作。再一次,请记住,您需要Windows Vista(或更高版本)和管理权限才能工作


链接到文档。

这是我目前使用的(我的想法,不是api):

断开与internet的连接:
internet连接(“释放”)
连接到互联网:
互联网连接(“续订”)

断开连接只会删除对internet的访问(它会在wifi图标中显示警告图标)。 连接可能需要5秒钟或更长时间

主题外
在任何情况下,您可能希望检查您是否已连接(当您使用上述代码时),我建议您:

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

下面是一个使用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;
        }
    }
}

“让生产率飞涨”。。。。谁是生产力?当然,我浪费了大量时间浏览intarwebs,但由于根本无法访问,我无法查找语言、库或框架的关键参考资料。今天我们的连接中断了大约一个小时,我真的陷入了困境。无法访问客户网站进行更新,也无法访问任何参考资料。如果你发现自己太容易上网而分心,那么试着把你的任务分解成更小的子任务。基本上使用David Allen的“完成事情”方法。如果你有一个小的增量步骤列表,可以推动工作的进行,这确实有助于提高工作的积极性。“让生产力突飞猛进”的评论应该是一个笑话,伙计们:)如果你有一个活跃的本地网络连接,它可能会将你连接到互联网。我不认为有任何方法可以在不阻止所有网络访问的情况下阻止internet访问(毕竟internet只是一组网络)。实际上,您通常可以通过查看路由表找到连接internet的接口。默认路由(0.0.0.0)几乎总是指向连接到internet的接口(我猜95%的配置都是这样设置的)要添加FirewallAPI.dll,您必须浏览到c:\windows\System32一些声明firewallPolicy的错误。规则为readony。。。无法添加规则添加此引用dll“FirewallAPI.dll”,您将在system32中找到此规则。这组代码将阻止您系统的所有出站连接。也许这个答案没有帮助OP实现他们的目的,但是,老实说,我很快就能读取所有配置文件(公共/私有/域)连接的防火墙状态。不幸的是,为了我自己的利益,我不能对这个答案投赞成票。尽管如此,我还是很感激这篇帖子和回复者。
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;
        }
    }
}
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);
}