程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 通過編程管理windows 防火牆

通過編程管理windows 防火牆

編輯:關於C#

最近項目中需要通過程序自動設置windows 防火牆,查了一下資料,可以通過命令行netsh firewall 來實現。封裝了一個類來實現對允許放開的程序(Allowed program)進行管理。管理其他內容比如放開端 口等方法是類似的。

程序中用到一個公共類 RunProcess,這個類可從我的另一篇文章 一個C#寫的調用外部進程類 獲得

namespace WinFirewall
{
   public enum TScope
   {
     ALL,
     SUBNET,
     CUSTOM,
   }
   public enum TMode
   {
     ENABLE,
     DISABLE,
   }
   /**//// <summary>
   /// Manage the allowed program with the Windows Firewall.
   /// </summary>
   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:MyAppMyApp.exe MyApp ENABLE
        set allowedprogram C:MyAppMyApp.exe MyApp DISABLE
        set allowedprogram C:MyAppMyApp.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:MyAppMyApp.exe name = MyApp mode = ENABLE
        set allowedprogram program = C:MyAppMyApp.exe name = MyApp mode = DISABLE
        set allowedprogram program = C:MyAppMyApp.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
     /**//// <summary>
     /// Program path and file name.
     /// </summary>
     public String Program
     {
       get
       {
         return m_Program;
       }
       set
       {
         m_Program = value;
       }
     }
     /**//// <summary>
     /// Program name (optional).
     /// </summary>
     public String Name
     {
       get
       {
         return m_Name;
       }
       set
       {
         m_Name = value;
       }
     }
     /**//// <summary>
     /// 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.    /// </summary>
     public TScope Scope
     {
       get
       {
         return m_Scope;
       }
       set
       {
         m_Scope = value;
       }
     }
     /**//// <summary>
     /// Program mode (optional).
     /// ENABLE - Allow through firewall (default).
     /// DISABLE - Do not allow through firewall
     /// </summary>
     public TMode Mode
     {
       get
       {
         return m_Mode;
       }
       set
       {
         m_Mode = value;
       }
     }
     /**//// <summary>
     /// Custom scope addresses (optional).
     /// </summary>
     /// <example>
     /// 157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0
     /// </example>
     public String Address
     {
       get
       {
         return m_Address;
       }
       set
       {
         m_Address = value;
       }
     }
     #endregion
     public method#region public method
     /**//// <summary>
     /// Set allowed program
     /// </summary>
     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);
       }
     }
     /**//// <summary>
     /// Delete allowed program
     /// </summary>
     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);
       }
     }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved