最近项目中需要通过程序自动设置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); } } |
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- 防火墙软件应用 (1891篇文章)
- Windows操作系统安装 (16213篇文章)
- 网络管理实用手册 (22852篇文章)
- Cisco防火墙专题 (4686篇文章)
- Windows权限设置 (10607篇文章)
- Linux防火墙 (10441篇文章)
- Windows操作系统安全集 (19431篇文章)
- Java编程开发手册 (8574篇文章)
- Windows频道 (10161篇文章)
- Windows防火墙 (99篇文章)
- 自己写框架 (359次浏览)
- Spring框架概述 (237次浏览)
- Struts应用开发 (211次浏览)
- Java基础知识:初学者必须理解的六大问题 (185次浏览)
- struts验证框架开发详解 (140次浏览)
- Struts 2, spring 2, hibernate 的整合 (134次浏览)
- OpenXava框架发布3.0版本 (116次浏览)
- Java应用中Hibernate对多表关联查询总结 (96次浏览)
- java字符串编码类型获取 (95次浏览)
- 关于提高自己水平的十大技术 (86次浏览)



