您的位置:首页 > 编程语言

通过编程管理windows 防火墙

2013-09-24 12:00 417 查看
最近项目中需要通过程序自动设置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);

   }

   }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: