操作系统防火墙

作者:追风剑情 发布于:2019-12-12 21:57 分类:C#

示例

using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
//64位系统: 需要引入C:\Windows\SysWOW64\FirewallAPI.dll
//32位系统: 需要引入C:\Windows\System32\FirewallAPI.dll
using NetFwTypeLib;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            FirewallOperateByObject(false, false, false);
            Console.WriteLine("FirewallEnabled={0}", FirewallEnabled);
            Console.ReadLine();
        }
        
        // 判断Windows防火墙有没开启 (仅能判断公用网络位置)
        private static bool FirewallEnabled
        {
            get
            {
                INetFwMgr netFwMgr = GetFirewallManager();
                return netFwMgr.LocalPolicy.CurrentProfile.FirewallEnabled;
            }
        }

        private static INetFwMgr GetFirewallManager()
        {
            const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}";
            Type objType = Type.GetTypeFromCLSID(new Guid(CLSID_FIREWALL_MANAGER));
            return Activator.CreateInstance(objType) as INetFwMgr;
        }

        /// <summary>
        /// 转载自 https://www.cnblogs.com/pilgrim/p/11135485.html
        /// 通过对象防火墙操作
        /// </summary>
        /// <param name="isOpenDomain">域网络防火墙(禁用:false;启用(默认):true)</param>
        /// <param name="isOpenPublicState">公共网络防火墙(禁用:false;启用(默认):true)</param>
        /// <param name="isOpenStandard">专用网络防火墙(禁用: false;启用(默认):true)</param>
        /// <returns></returns>
        public static bool FirewallOperateByObject(bool isOpenDomain = true, bool isOpenPublicState = true, bool isOpenStandard = true)
        {
            try
            {
                INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
                // 启用<高级安全Windows防火墙> - 专有配置文件的防火墙
                firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, isOpenStandard);
                // 启用<高级安全Windows防火墙> - 公用配置文件的防火墙
                firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, isOpenPublicState);
                // 启用<高级安全Windows防火墙> - 域配置文件的防火墙
                firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, isOpenDomain);
            }
            catch (Exception e)
            {
                string error = $"防火墙修改出错:{e.Message}";
                throw new Exception(error);
            }
            return true;
        }
    }
}

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号