我的工作做了防火墙的检查。 下面的代码很容易检查默认的Windows防火墙的状态:
INetFwMgr manager = GetFireWallManager();
bool isFirewallEnabled = manager.LocalPolicy.CurrentProfile.FirewallEnabled;
if (isFirewallEnabled == false)
{
Console.WriteLine("Firewall is not enabled.");
}
else
{
Consoe.WriteLine("Firewall is enabled.");
}
Console.ReadLine();
private static INetFwMgr GetFireWallManager()
{
Type objectType = Type.GetTypeFromCLSID(new Guid(firewallGuid));
return Activator.CreateInstance(objectType) as INetFwMgr;
}
接下来的问题是:我如何找到一个非Windows防火墙的状态? 如果防火墙适当整合,将上述检查工作完全一样或者是有没有做这更好的方法? 我已经检查了这个帖子: C#Windows安全中心设置和这个职位: C# -如果外部启用防火墙如何chceck? 但事实证明两者相对无益。
我一直在寻找到WMI API,但它是相当混乱,到目前为止,通过MSDN文档一直没有太看好。 我也曾尝试瞎搞与SelectQuery但到目前为止,我都没有成功。 任何人都可以帮助我在一个新的起点,或者我也许能找到关于第三方防火墙更好的文档/指令在哪里?
编辑:目前,我进一步探讨到WMI,特别是类FirewallProduct
通过后的建议。
更新2:我一直在测试下面的代码片段:
string wmiNameSpace = "SecurityCenter2";
ManagementScope scope;
scope = new ManagementScope(String.Format("\\\\{0}\\root\\{1}", "localhost", wmiNameSpace), null);
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM FirewallProduct");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
但是,在运行这将导致以下错误: Exception Invalid namespace
并指向39行( scope.Connect()
我也不会感到惊讶,如果我只是错过了一个参数或格式不正确的东西,我只是不知道它是什么。
从更新3切换SecurityCenter2
到SecurityCenter
仍得到相同的invalid namespace
的错误。
更新4我感动的控制台应用程序转移到不同的盒子(WIN7不winserver08r2),并预期其正常汇报。 因此,它可能是与我目前一直在测试虚拟机上的问题。 下一步是解析出活动/非活动状态
UPDATE 5它在另一个Server08箱和相同的测试invalid namespace
的错误出现。 使用SecurityCenter
,而不是SecurityCenter2
不能解决问题。 有一些基本的安全功能的Windows服务器操作系统的使用,以防止篡改防火墙,或做服务器操作系统的不附带的WMI功能的特定按键?