【问题标题】:How to close all connections to internet?如何关闭所有与互联网的连接?
【发布时间】:2018-09-16 01:22:53
【问题描述】:

我有一个为公共图书馆编写的基本 .NET 应用程序,它只是启用和禁用 Internet 访问。它通过切换防火墙来实现这一点,并利用 UAC 提示输入管理员凭据。

它运行良好,但不会关闭现有连接。例如,Facebook Messenger 保持连接打开,并在启用防火墙并阻止所有 Internet 访问后很长时间继续工作。

理想情况下,我想关闭与本地子网外部的所有连接。如果这不可能,关闭端口 80/443 上的所有连接也可以。我想避免不得不杀死打开这些连接的实际进程,而宁愿只杀死连接本身。

我如何做到这一点?

【问题讨论】:

    标签: c# .net network-programming


    【解决方案1】:

    我知道这不是你想要的你可能会暴力破解网络适配器。重新启用后,它将允许您的防火墙规则生效

    基本上,没有适配器不能上网


    Disable network adapter without WMI

    Netsh

    Process.Start("cmd.exe","/c netsh interface set interface 'Local Area Connection' DISABLED")
    

    Disable/enable network adapter using WMI

    获取网络广告商

    public static List<NetworkAdapter> GetAllNetworkAdapter()
    {
       List<NetworkAdapter> allNetworkAdapter = new List<NetworkAdapter>();
    
       // Manufacturer <> 'Microsoft'to get all none virtual devices. 
       // Because the AdapterType property will be null if the NetworkAdapter is  
       // disabled, so we do not use NetworkAdapter = 'Ethernet 802.3' or  
       // NetworkAdapter = 'Wireless’ 
       string strWQuery = "SELECT DeviceID, ProductName, "
                            + "NetEnabled, NetConnectionStatus "
                            + "FROM Win32_NetworkAdapter "
                            + "WHERE Manufacturer <> 'Microsoft'";
    
       ManagementObjectCollection networkAdapters = WMIOperation.WMIQuery(strWQuery);
       foreach (ManagementObject moNetworkAdapter in networkAdapters)
       {
          try
          {
             allNetworkAdapter.Add(new NetworkAdapter(
                                                       Convert.ToInt32(moNetworkAdapter["DeviceID"].ToString()),
                                                       moNetworkAdapter["ProductName"].ToString(),
                                                       (Convert.ToBoolean(moNetworkAdapter["NetEnabled"].ToString()))
                                                          ? (int)EnumNetEnabledStatus.Enabled
                                                          : (int)EnumNetEnabledStatus.Disabled,
                                                       Convert.ToInt32(moNetworkAdapter["NetConnectionStatus"].ToString()
                                                                      )));
          }
          catch (NullReferenceException)
          {
             // Ignore some other devices (like the bluetooth), that need user  
             // interaction to enable or disable. 
          }
       }
    
       return allNetworkAdapter;
    }
    

    启用禁用

    public int EnableOrDisableNetworkAdapter(string strOperation)
    {
       int resultEnableDisableNetworkAdapter = (int)EnumEnableDisableResult.Unknow;
       ManagementObject crtNetworkAdapter = new ManagementObject();
    
       string strWQuery = string.Format("SELECT DeviceID, ProductName, "
                                        + "NetEnabled, NetConnectionStatus "
                                        + "FROM Win32_NetworkAdapter " + "WHERE DeviceID = {0}", DeviceId);
    
       try
       {
          ManagementObjectCollection networkAdapters =
             WMIOperation.WMIQuery(strWQuery);
          foreach (ManagementObject networkAdapter in networkAdapters)
          {
             crtNetworkAdapter = networkAdapter;
          }
    
          crtNetworkAdapter.InvokeMethod(strOperation, null);
    
          Thread.Sleep(500);
          while (GetNetEnabled() != ((strOperation.Trim() == "Enable")
                                        ? (int)EnumNetEnabledStatus.Enabled
                                        : (int)EnumNetEnabledStatus.Disabled))
          {
             Thread.Sleep(100);
          }
    
          resultEnableDisableNetworkAdapter =
             (int)EnumEnableDisableResult.Success;
       }
       catch (NullReferenceException)
       {
          // If there is a NullReferenceException, the result of the enable or  
          // disable network adapter operation will be fail 
          resultEnableDisableNetworkAdapter = (int)EnumEnableDisableResult.Fail;
       }
    
       crtNetworkAdapter.Dispose();
    
       return resultEnableDisableNetworkAdapter;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多