我将翻译以下内容:
问题是:如何查找非Windows防火墙的状态? 如果防火墙已经正确集成,上述检查是否仍然有效,或者有更好的方法来做到这一点? 我已经查看了此帖子:C# Windows Security Center Settings 和此帖子:C# - How to chceck if external firewall is enabled? 但两者都没有提供太多帮助。
我一直在研究WMI API,但目前它还相当混乱,而通过MSDN的文档也没有太大的帮助。 我还尝试过玩弄 SelectQuery,但到目前为止我还没有成功。 有人能帮助我找到一个新的起点,或者告诉我在哪里可以找到关于第三方防火墙更好的文档/指导吗?
编辑:目前我正在进一步研究WMI,特别是类
但运行此代码会导致以下错误:
我正在进行防火墙检查。下面的代码可以轻松检查默认 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 Security Center Settings 和此帖子:C# - How to chceck if external firewall is enabled? 但两者都没有提供太多帮助。
我一直在研究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);
但运行此代码会导致以下错误:
异常:无效的命名空间
,并且指向第39行(scope.Connect()
)。我不会感到惊讶,如果我只是错过了一个参数或格式化了一些东西,我只是不知道是什么。
更新3:从SecurityCenter2
切换到SecurityCenter
仍然会出现相同的无效命名空间
错误。
更新4:我将控制台应用程序移动到另一台计算机上(win7而不是winserver08r2),并且它像预期的那样正确地报告回来。因此,可能存在问题,我目前一直在测试的VM。下一步是解析活动/非活动状态
更新5:在另一台Server08框上进行了测试,并且出现了相同的无效命名空间
错误。使用SecurityCenter
而不是SecurityCenter2
无法解决此问题。Windows Server OS使用某些基础安全功能以防止篡改防火墙,还是Server OS没有特定的WMI功能密钥集?
SecurityCenter2
命名空间适用于 Windows Vista、7 和 8,对于 XP,您必须使用SecurityCenter
命名空间。 - RRUZ