检查第三方防火墙上机(Check for Third Party Firewalls on a Ma

2019-07-04 05:25发布

我的工作做了防火墙的检查。 下面的代码很容易检查默认的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切换SecurityCenter2SecurityCenter仍得到相同的invalid namespace的错误。

更新4我感动的控制台应用程序转移到不同的盒子(WIN7不winserver08r2),并预期其正常汇报。 因此,它可能是与我目前一直在测试虚拟机上的问题。 下一步是解析出活动/非活动状态

UPDATE 5它在另一个Server08箱和相同的测试invalid namespace的错误出现。 使用SecurityCenter ,而不是SecurityCenter2不能解决问题。 有一些基本的安全功能的Windows服务器操作系统的使用,以防止篡改防火墙,或做服务器操作系统的不附带的WMI功能的特定按键?

Answer 1:

根据微软的问:如何Windows安全中心检测第三方产品及其状态?

答:Windows安全中心采用的检测状态一个两层的做法。 一层是手动的,并且另一层通过Windows管理工具(WMI)是自动的。 在手动检测模式下,Windows安全中心搜索独立软件制造商提供给微软该注册表项和文件。 这些注册表项和文件让Windows安全中心检测独立软件的状态。 在WMI模式下,软件厂商确定自己的产品状态,并通过WMI提供程序报告状态返回到Windows安全中心。 在这两种模式下,Windows安全中心将尝试确定以下是否是真实的:

  • 防病毒程序存在。
  • 防病毒签名是最新的。
  • 实时扫描或按访问扫描,防病毒程序打开。
  • 对于防火墙,Windows安全中心检测是否安装了第三方防火墙和防火墙是否打开或没有。

所以,你可以使用WMI来确定是否安装了第三方防火墙,使用FirewallProduct类,有时前,我写这个话题解释如何获取使用WMI此信息的文章。

  • Getting the installed Antivirus, AntiSpyware and Firewall software using Delphi and the WMI

试试这个C#示例来获得当前安装的第三方防火墙名称和状态。

using System;
using System.Collections.Generic;
using System.Management;
using System.Text;

namespace GetWMI_Info
{
    class Program
    {

        static void Main(string[] args)
        {
            try
            {
                //select the proper wmi namespace depending of the windows version
                string WMINameSpace = System.Environment.OSVersion.Version.Major > 5 ? "SecurityCenter2" : "SecurityCenter";

                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);

                foreach (ManagementObject WmiObject in Searcher.Get())
                {

                    Console.WriteLine("{0,-35} {1,-40}","Firewall Name",WmiObject["displayName"]);                      
                    if (System.Environment.OSVersion.Version.Major < 6) //is XP ?
                    {
                    Console.WriteLine("{0,-35} {1,-40}","Enabled",WmiObject["enabled"]);    
                    }
                    else
                    {
                        Console.WriteLine("{0,-35} {1,-40}","State",WmiObject["productState"]); 
                    }   
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(String.Format("Exception {0} Trace {1}",e.Message,e.StackTrace));
            }
            Console.WriteLine("Press Enter to exit");
            Console.Read();
        }
    }
}


文章来源: Check for Third Party Firewalls on a Machine