任何方式来打开“互联网closures”在Windows使用C#?
我正在寻找指向API的指针,这将允许我通过打开和closures连接来控制Internet连接。
我想写一个小小的控制台应用程序,使我可以打开和closures我的访问,从而使生产力飞涨:)(以及学习过程中的某些东西)
谢谢 !!
如果您使用Windows Vista,则可以使用内置防火墙来阻止任何Internet访问。
下面的代码创build一个防火墙规则,阻止所有networking适配器上的任何传出连接:
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(或更高版本)和pipe理权限才能正常工作。
链接到防火墙API文档。
实际上有很多方法可以closures(阅读:中断)您的互联网访问,但我认为最简单的方法就是将您连接到互联网的networking接口打开。
这里是一个链接,让你开始: 识别活动的networking接口
这是我目前使用的(我的想法,而不是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("release");
连接到Internet: InternetConnection("renew");
断开连接将只删除对互联网的访问(它将在无线networking图标中显示警告图标)。 连接可能需要五秒钟或更长时间。
话题 :
在任何情况下,你可能想要检查你是否连接(当你使用上面的代码),我最好build议这样做:
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; } }
这是一个使用WMIpipe理对象的示例程序。
在示例中,我通过查找名称中包含“Wireless”的networking适配器来定位无线适配器。 你可以找出一些子string来标识你定位的适配器的名字(你可以通过在命令行上执行ipconfig /all
来获得名字)。 不通过一个子string会导致这个通过所有适配器,这是非常严重的。 您需要将对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; } } }
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); }