C#防火墙规则多配置文件

时间:2019-03-24 23:55:59

标签: c#

如何在所有C#中设置防火墙规则? 我尝试只设置域或私有域,但效果很好。但是对于所有代码,它都不起作用。 我使用来自GitHub的代码,此解决方案https://github.com/falahati/WindowsFirewallHelper

部分代码:

  var rule = FirewallManager.Instance.CreateApplicationRule(FirewallManager.Instance.GetProfile(FirewallProfiles.All).Type, @"MyApp Rule", FirewallAction.Allow, @"C:\MyApp.exe");
  rule.Direction = FirewallDirection.Inbound;
  FirewallManager.Instance.Rules.Add(rule);

  [Flags]
  public enum FirewallProfiles
  {
     Domain = NET_FW_PROFILE_TYPE2.NET_FW_PROFILE2_DOMAIN,
     Private = NET_FW_PROFILE_TYPE2.NET_FW_PROFILE2_PRIVATE,
     Public = NET_FW_PROFILE_TYPE2.NET_FW_PROFILE2_PUBLIC,
     All=NET_FW_PROFILE_TYPE2.NET_FW_PROFILE2_ALL
  }

我抓到exception =FirewallLegacyNotSupportedException

2 个答案:

答案 0 :(得分:0)

建议:尝试将其添加到您的app.config / web.config:

<configuration>
   <runtime>
      <NetFx40_LegacySecurityPolicy enabled="true"/>
   </runtime>
</configuration>

特别是:

  

MSDN: Compatibility: Using the CAS Policy Legacy Option

     

通过配置元素,您可以   指定进程或库使用旧版CAS策略。当你   启用此元素,策略和证据超载将作为   他们在框架的早期版本中做了。

     

注意:   CAS策略行为是基于运行时版本指定的,因此   修改一个运行时版本的CAS策略不会影响CAS   其他版本的政策。

建议:

看看INetFwOpenPorts API

建议#3:

看看this C# example

请发回这两项信息是否对您有用。我正在用手指交叉;)!

答案 1 :(得分:0)

您无法获得所有配置文件的配置文件。具有高级安全性的Windows防火墙(Vista +)中没有All配置文件。该库只是Windows防火墙COM API的包装,您需要具有有关基础系统的基本信息才能使用它。 其次,通过传递FirewallProfiles并随后使用Type属性来获取配置文件实质上等于将FirewallProfiles直接传递给方法。

      var rule = FirewallManager.Instance.CreateApplicationRule(
        FirewallProfiles.Private | FirewallProfiles.Domain | FirewallProfiles.Public, 
        @"MyApp Rule", 
        FirewallAction.Allow, 
        @"C:\MyApp.exe"
      );
      rule.Direction = FirewallDirection.Inbound;
      FirewallManager.Instance.Rules.Add(rule);

请通过Github问题跟踪器提出这样的问题。 https://github.com/falahati/WindowsFirewallHelper/issues