zoukankan      html  css  js  c++  java
  • 用C#来控制高级安全Windows防火墙

    有的时候我们需要在自己的产品中检测<高级安全Windows防火墙>的状态,并有可能需要加入一些规则甚至需要关闭掉高级安全Windows防火墙。

    下面就告诉如何来做:

    <高级安全Windows防火墙>的状态界面如下:

    已测试环境 Windows Server 2008 Enterprise X64 / Windows Server 2008 R2 Enterprise

    PS: 我只关注于服务器环境,:)

    image

    image

    第一步:添加对于Windows Firewall with Advanced Security APIs的COM引用INetFwPolicy2

    image

    第二步:引入需要的命名空间

    using NetFwTypeLib;

    第三步:上代码,自己看了

    //启用或禁用<高级安全Windows防火墙>,适用于Windows Vista/7/2008 R2(x86/x64)

    //来自 Blog.WebServerGuard.Net 
    bool Net_FW_Domain_Status = false; 
    bool Net_FW_Public_Status = false; 
    bool Net_FW_Private_Status = false;

    Type NetFwMgrTypeWithAdSecurity = Type.GetTypeFromProgID("HNetCfg.FwPolicy2", false); 
    INetFwPolicy2  mgrWithAdSecurity = (INetFwPolicy2 )Activator.CreateInstance(NetFwMgrTypeWithAdSecurity);

    //启用或禁用<高级安全Windows防火墙> - 所有配置文件,适用于Windows Vista/7/2008 R2 
    //mgr2.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_ALL, false);

    //启用或禁用<高级安全Windows防火墙> - 域配置文件,适用于Windows Vista/7/2008 R2 
    mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, false);

    //启用或禁用<高级安全Windows防火墙> - 公用配置文件,适用于Windows Vista/7/2008 R2 
    mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, true );

    //启用或禁用<高级安全Windows防火墙> - 专有配置文件,适用于Windows Vista/7/2008 R2 
    mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, false);

    //检测<高级安全Windows防火墙>的状态

    //来自 Blog.WebServerGuard.Net 
    Net_FW_Domain_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN); 
    MessageBox.Show("Net_FW_Domain_Status:" + Net_FW_Domain_Status.ToString ());

    Net_FW_Public_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC); 
    MessageBox.Show("Net_FW_Public_Status:" + Net_FW_Public_Status.ToString());

    Net_FW_Private_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE); 
    MessageBox.Show("Net_FW_Private_Status:" + Net_FW_Private_Status.ToString());

    域配置文件、专有配置文件、公用配置文件适用范围请自行查阅资料。

    更多功能可以参考:

    《Using Windows Firewall with Advanced Security》 - http://msdn.microsoft.com/en-us/library/aa366418(VS.85).aspx

    上面的资料给出了C/C++/VBScript的示例代码,很容易对应到相应的C#代码

     如何 添加 和 删除 允许通过防火墙的程序进入例外列表

    本篇,我们用到了COM引用,因为不使用COM引用的话,操作太过繁琐了 

    一、 添加 COM 引用

    在引用里,选择 COM 页, 找到 NetFwTypeLib , 确定即可

    二、 引入命名空间

    using NetFwTypeLib;

    三、 添加允许通过防火墙的例外程序

    //创建firewall管理类的实例
    INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
    
    //创建一个认证程序类的实例
    INetFwAuthorizedApplication app = (INetFwAuthorizedApplication)Activator.CreateInstance(
        Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication"));
    
    //在例外列表里,程序显示的名称
    app.Name = "自定义"; 
    
    //程序的决定路径,这里使用程序本身
    app.ProcessImageFileName = Application.ExecutablePath;
    
    //是否启用该规则
    app.Enabled = true;
    
    //加入到防火墙的管理策略
    netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app);
    四、删除一个例外 列表 里的程序
    INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
    //参数为程序的绝对路径
    netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(Application.ExecutablePath);
  • 相关阅读:
    4.Spring系列之Bean的配置1
    3.Spring系列之IOC&DI
    2.Spring系列之HelloWorld
    1.spring系列之简要概述
    SVN 安装与使用
    6.用CXF编写基于Spring的WebService
    5.webService拦截器
    4.CXF所支持的数据类型
    APP消息推送及疑问解答
    VMware安装CentOS
  • 原文地址:https://www.cnblogs.com/candyzhmm/p/8194600.html
Copyright © 2011-2022 走看看