zoukankan      html  css  js  c++  java
  • C#添加删除防火墙例外(程序、端口)

    一、 添加 COM 引用

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

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

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using NetFwTypeLib;  
      
    namespace Common  
    {  
        public static class INetFwManger  
        {  
            /// <summary>  
            /// 添加防火墙例外端口  
            /// </summary>  
            /// <param name="name">名称</param>  
            /// <param name="port">端口</param>  
            /// <param name="protocol">协议(TCP、UDP)</param>  
            public static void NetFwAddPorts(string name, int port, string protocol)  
            {  
                //创建firewall管理类的实例  
                INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));  
      
                INetFwOpenPort objPort = (INetFwOpenPort)Activator.CreateInstance(  
                    Type.GetTypeFromProgID("HNetCfg.FwOpenPort"));  
      
                objPort.Name = name;  
                objPort.Port = port;  
                if (protocol.ToUpper() == "TCP")  
                {  
                    objPort.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;  
                }  
                else  
                {  
                    objPort.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP;  
                }  
                objPort.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL;  
                objPort.Enabled = true;  
      
                bool exist = false;  
                //加入到防火墙的管理策略  
                foreach (INetFwOpenPort mPort in netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts)  
                {  
                    if (objPort == mPort)  
                    {  
                        exist = true;  
                        break;  
                    }  
                }  
                if (!exist) netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(objPort);  
            }  
            /// <summary>  
            /// 将应用程序添加到防火墙例外  
            /// </summary>  
            /// <param name="name">应用程序名称</param>  
            /// <param name="executablePath">应用程序可执行文件全路径</param>  
            public static void NetFwAddApps(string name, string executablePath)  
            {  
                //创建firewall管理类的实例  
                INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));  
      
                INetFwAuthorizedApplication app = (INetFwAuthorizedApplication)Activator.CreateInstance(  
                    Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication"));  
      
                //在例外列表里,程序显示的名称  
                app.Name = name;  
      
                //程序的路径及文件名  
                app.ProcessImageFileName = executablePath;  
      
                //是否启用该规则  
                app.Enabled = true;  
      
                //加入到防火墙的管理策略  
                netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app);  
      
                bool exist = false;  
                //加入到防火墙的管理策略  
                foreach (INetFwAuthorizedApplication mApp in netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications)  
                {  
                    if (app == mApp)  
                    {  
                        exist = true;  
                        break;  
                    }  
                }  
                if (!exist) netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app);  
            }  
            /// <summary>  
            /// 删除防火墙例外端口  
            /// </summary>  
            /// <param name="port">端口</param>  
            /// <param name="protocol">协议(TCP、UDP)</param>  
            public static void NetFwDelApps(int port,string protocol)  
            {  
                INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));  
                if (protocol == "TCP")  
                {  
                    netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove(port, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP);  
                }  
                else  
                {  
                    netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove(port, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP);  
                }  
            }  
            /// <summary>  
            /// 删除防火墙例外中应用程序  
            /// </summary>  
            /// <param name="executablePath">程序的绝对路径</param>  
            public static void NetFwDelApps(string executablePath)  
            {  
                INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));  
      
                netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(executablePath);  
      
            }  
        }  
    }  
    

      转载:http://sdfiyon.iteye.com/blog/1197511

  • 相关阅读:
    hibernate 笔记二
    log4j详解及简易搭建
    hibernate 笔记一
    【工作心得】timesten应用(安装配置篇)
    【转】boost 内存池
    【转】基于Socket的UDP和TCP编程介绍
    【工作心得】timesten应用(开发篇)
    【读书笔记】UNIX进程间通信
    【读书笔记】硬链接与软链接
    【转】Linux Socket编程
  • 原文地址:https://www.cnblogs.com/candyzhmm/p/8194570.html
Copyright © 2011-2022 走看看