『QQ:1353814576』

C# 操作DOS添加端口防火墙名单


开发软件有些时候监听端口和外部通信 需要通过防火墙的端口访问网络,常规情况下使用的端口都是默认设置关闭的,每次部署都需要手动添加就比较繁琐,

下面是C#调用dos命令代码打开端口防火墙的代码例子 可以实现一键自动添加端口防火墙白名单 代码如下:

 /// <summary>
    /// 防火墙
    /// </summary>
    public static class FirewallPort
    {
        /// <summary>
        /// 端口协议类型
        /// </summary>
        public enum Protocol
        {
            TCP, UDP
        }
        public enum ProtocolMode
        {
            /// <summary>
            /// 入站
            /// </summary>
            IN,
            /// <summary>
            /// 出站
            /// </summary>
            OUT
        }
        [MTAThread]
        public static string Open(string rulename, int port, Protocol protocol, ProtocolMode protocolmode)
        {
            string cmd= $" netsh advfirewall firewall add rule name={rulename} dir={protocolmode.ToString()} 
			action=allow protocol={protocol.ToString()} localport={port}";
            return Command(cmd);
        }

        public static string Delete(string rulename,int port, Protocol protocol, ProtocolMode protocolmode) {
            string cmd = $" netsh advfirewall firewall delete rule name={rulename} protocol={protocol.ToString()}
			localport={port}";
            return Command(cmd);
        }

        private static string Command(string cmd) {
            System.Diagnostics.Process pro = new System.Diagnostics.Process();//实例化进程
            pro.StartInfo.FileName = "cmd.exe";//设置要运行的程序文件
            pro.StartInfo.UseShellExecute = false;//是否使用操作系统shell程序启动
            pro.StartInfo.RedirectStandardInput = true;//是否接受来自应用程序的调用
            pro.StartInfo.RedirectStandardOutput = true;//是否接受来自应用程序的输出信息
            pro.StartInfo.RedirectStandardError = true;//是否接受重定向错误信息
            pro.StartInfo.CreateNoWindow = true;//不显示窗口信息
            pro.Start();
            //向cmd窗口发送输入信息
            pro.StandardInput.WriteLine(cmd + " &exit");
            pro.StandardInput.AutoFlush = true;
            //获取窗口输出的信息
            string info = pro.StandardOutput.ReadToEnd();
            pro.WaitForExit();//等待程序运行完退出程序
            pro.Close();//关闭进程
            return info;
        }
    }

注意 ! 操作时需要开启防火墙,不然执行会报异常