【转】自己开发程序管理WINDOWS防火墙

简介: 2008-05-21 07:20作者:肖波出处:天极网责任编辑:nancy     最近项目中需要通过程序自动设置windows 防火墙,查了一下资料,可以通过命令行netsh firewall来实现。

    2008-05-21 07:20作者:肖波出处:天极网责任编辑:nancy

    最近项目中需要通过程序自动设置windows 防火墙,查了一下资料,可以通过命令行netsh firewall来实现。封装了一个类来实现对运行放开的程序(Allowed program)进行管理。管理其他内容比如放开端口等方法是类似的。

  程序中用到一个公共类 RunProcess,这个类可从另一篇文章 《一个C#写的调用外部进程类》 获得

 


 namespace WinFirewall
  {
  
   public enum TScope
   {
   ALL,
   SUBNET,
   CUSTOM,
   }
  
   public enum TMode
   {
   ENABLE,
   DISABLE,
   }
  
   /**//// 
   /// Manage the allowed program with the Windows Firewall.
   /// 
   public class AllowedProgram
   {
   Set AllowedProgram Help#region Set AllowedProgram Help
   /**//*
   set allowedprogram
  
   [ program = ] path
   [ [ name = ] name
   [ mode = ] ENABLE|DISABLE
   [ scope = ] ALL|SUBNET|CUSTOM
   [ addresses = ] addresses
   [ profile = ] CURRENT|DOMAIN|STANDARD|ALL ]
  
   Sets firewall allowed program configuration.
  
   Parameters:
  
   program - Program path and file name.
  
   name - Program name (optional).
  
   mode - Program mode (optional).
   ENABLE - Allow through firewall (default).
   DISABLE - Do not allow through firewall.
  
   scope - Program scope (optional).
   ALL - Allow all traffic through firewall (default).
   SUBNET - Allow only local network (subnet) traffic through firewall.
   CUSTOM - Allow only specified traffic through firewall.
  
   addresses - Custom scope addresses (optional).
  
   profile - Configuration profile (optional).
   CURRENT - Current profile (default).
   DOMAIN - Domain profile.
   STANDARD - Standard profile.
   ALL - All profiles.
  
   Remarks: 'scope' must be 'CUSTOM' to specify 'addresses'.
  
   Examples:
  
   set allowedprogram C:\MyApp\MyApp.exe MyApp ENABLE
  
   set allowedprogram C:\MyApp\MyApp.exe MyApp DISABLE
  
   set allowedprogram C:\MyApp\MyApp.exe MyApp ENABLE CUSTOM
  
   157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet
   set allowedprogram program = C:\MyApp\MyApp.exe name = MyApp mode = ENABLE
  
   set allowedprogram program = C:\MyApp\MyApp.exe name = MyApp mode = DISABLE
   set allowedprogram program = C:\MyApp\MyApp.exe name = MyApp mode = ENABLE
  
   scope = CUSTOM addresses =
   157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet
   */
   #endregion
  
   private field#region private field
   private String m_Program;
   private String m_Name;
   private TScope m_Scope = TScope.ALL;
   private TMode m_Mode = TMode.ENABLE;
   private String m_Address;
   #endregion
  
   public property#region public property
   /**//// 
   /// Program path and file name.
   /// 
   public String Program
   {
   get
   {
   return m_Program;
   }
  
   set
   {
   m_Program = value;
   }
   }
  
   /**//// 
   /// Program name (optional).
   /// 
   public String Name
   {
   get
   {
   return m_Name;
   }
  
   set
   {
   m_Name = value;
   }
   }
  
   /**//// 
   /// Program scope (optional).
   /// ALL - Allow all traffic through firewall (default).
   /// SUBNET - Allow only local network (subnet) traffic through firewall.
   /// CUSTOM - Allow only specified traffic through firewall. /// 
   public TScope Scope
   {
   get
   {
   return m_Scope;
   }
  
   set
   {
   m_Scope = value;
   }
   }
  
   /**//// 
   /// Program mode (optional).
   /// ENABLE - Allow through firewall (default).
   /// DISABLE - Do not allow through firewall
   /// 
   public TMode Mode
   {
   get
   {
   return m_Mode;
   }
  
   set
   {
   m_Mode = value;
   }
   }
  
   /**//// 
   /// Custom scope addresses (optional).
   /// 
   /// 
   /// 157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0
   /// 
   public String Address
   {
   get
   {
   return m_Address;
   }
  
   set
   {
   m_Address = value;
   }
   }
  
   #endregion
  
   public method#region public method
  
   /**//// 
   /// Set allowed program
   /// 
   public void Set()
   {
   Debug.Assert(Program != null);
  
   if (Name == null)
   {
   Name = System.IO.Path.GetFileNameWithoutExtension(Program);
   }
  
   if (Scope == TScope.CUSTOM)
   {
   Debug.Assert(Address != null);
   }
  
   RunProcess runCmd = new RunProcess();
   String command;
  
   command = String.Format("firewall set allowedprogram {0} {1} {2} {3}",
   Program, Name, Mode.ToString(), Scope.ToString());
  
   if (Scope == TScope.CUSTOM)
   {
   command += " " + Address;
   }
  
   runCmd.Run("netsh", command);
  
   if (runCmd.Error != null && runCmd.Error != "")
   {
   throw new Exception(runCmd.Error);
   }
  
   if (!runCmd.Output.ToLower().Contains("ok."))
   {
   throw new Exception(runCmd.Output);
   }
   }
  
   /**//// 
   /// Delete allowed program
   /// 
   public void Delete()
   {
   Debug.Assert(Program != null);
  
   RunProcess runCmd = new RunProcess();
  
   String command = String.Format("firewall delete allowedprogram {0}",
   Program);
  
   runCmd.Run("netsh", command);
  
   if (runCmd.Error != null && runCmd.Error != "")
   {
   throw new Exception(runCmd.Error);
   }
  
   if (!runCmd.Output.ToLower().Contains("ok."))
   {
   throw new Exception(runCmd.Output);
   }
   }
  
   #endregion
   }
  }
  
  调用的相关例程
   private void buttonSetAllowProgram_Click(object sender, EventArgs e)
   {
   try
   {
   AllowedProgram allowedProgram = new AllowedProgram();
   allowedProgram.Program = textBoxProgramFilePath.Text.Trim();
  
   if (checkBoxEnable.Checked)
   {
   allowedProgram.Mode = TMode.ENABLE;
   }
   else
   {
   allowedProgram.Mode = TMode.DISABLE;
   }
  
   allowedProgram.Scope = (TScope)comboBoxScope.SelectedItem;
  
   allowedProgram.Address = textBoxAddress.Text.Trim();
  
   allowedProgram.Set();
  
   MessageBox.Show("OK", "Information", MessageBoxButtons.OK);
   }
   catch (Exception e1)
   {
   MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
   }
  
   private void buttonDelAllowProgram_Click(object sender, EventArgs e)
   {
   try
   {
   AllowedProgram allowedProgram = new AllowedProgram();
   allowedProgram.Program = textBoxProgramFilePath.Text.Trim();
   allowedProgram.Delete();
  
   MessageBox.Show("OK", "Information", MessageBoxButtons.OK);
   }
   catch (Exception e1)
   {
   MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
   }

 

目录
相关文章
|
16天前
|
消息中间件 编译器 API
Windows窗口程序
Windows窗口程序
|
1月前
|
Windows
实现Windows程序的数据更新
实现Windows程序的数据更新
12 0
|
1月前
|
Windows
构建布局良好的Windows程序
构建布局良好的Windows程序
11 0
|
1月前
|
C# Windows
初识Windows程序
初识Windows程序
10 0
|
2月前
|
Java Linux Windows
windows实现自动部署jar包运行程序
windows实现自动部署jar包运行程序
43 0
|
4月前
|
移动开发
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
|
3月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
94 1
|
1月前
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
|
2月前
|
Windows
火山中文编程 -- 第一个windows程序
火山中文编程 -- 第一个windows程序
12 0