天天看点

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

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

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

 

 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

   scope = CUSTOM addresses =

   */

   #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;

   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

   return m_Name;

   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

   return m_Scope;

   m_Scope = value;

   /// Program mode (optional).

   /// ENABLE - Allow through firewall (default).

   /// DISABLE - Do not allow through firewall

   public TMode Mode

   return m_Mode;

   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

   return m_Address;

   m_Address = value;

   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());

   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()

   String command = String.Format("firewall delete allowedprogram {0}",

   Program);

  }

  调用的相关例程

   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)

   allowedProgram.Delete();