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;
}
}
注意 ! 操作时需要开启防火墙,不然执行会报异常