有什么方法可以使用c#在Windows中关闭"互联网"?

sun*_*eep 25 c#

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

我想写一个小的控制台应用程序,允许我打开和关闭我的访问权限,允许生产力飞涨:)(以及在过程中学习的东西)

谢谢 !!

Gre*_*reg 44

如果您使用的是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);
Run Code Online (Sandbox Code Playgroud)

如果要再次允许Internet访问,请删除规则:

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Remove("Block Internet");
Run Code Online (Sandbox Code Playgroud)

这是我使用的其他一些代码的略微修改,所以我不能保证它会起作用.再一次,请记住,您需要Windows Vista(或更高版本)和管理权限才能使用.

链接到防火墙API文档.

  • 要添加FirewallAPI.dll,您必须浏览到c:\ windows\system32 (7认同)

new*_*guy 5

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

System.Diagnostics;    

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

断开互联网连接: 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;
    }
}
Run Code Online (Sandbox Code Playgroud)