Suchen Sie nach Firewalls von Drittanbietern auf einem Computer

Ich arbeite daran, einen Check für Firewalls durchzuführen. Mit dem folgenden Code können Sie den Status der Standard-Windows-Firewall ganz einfach überprüfen:

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

Die Frage lautet dann: Wie finde ich den Status einer Nicht-Windows-Firewall? Wenn die Firewall richtig integriert ist, funktioniert die obige Überprüfung genauso oder gibt es eine bessere Methode, um dies zu tun? Ich habe diesen Beitrag überprüft:C # Windows-Sicherheitscenter-Einstellungen und dieser Beitrag:Wie überprüfe ich, ob die externe Firewall aktiviert ist? aber beide erwiesen sich als relativ wenig hilfreich.

Ich habe mir die WMI-API angeschaut, aber sie ist bisher ziemlich verwirrend, und die Dokumentation über MSDN war nicht allzu vielversprechend. Ich habe auch versucht herumzuspielenSelectQuery aber bisher war ich erfolglos. Kann mir jemand bei einem neuen Ausgangspunkt behilflich sein oder wo ich bessere Dokumentationen / Anweisungen zu Firewalls von Drittanbietern finden kann?

BEARBEITEN: Derzeit beschäftige ich mich weiter mit WMI, insbesondere mit der KlasseFirewallProduct wie von einem post vorgeschlagen.

UPDATE 2: Ich habe das folgende Snippet getestet:

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

Das Ausführen dieses Befehls führt jedoch zu folgendem Fehler:Exception Invalid namespace und es zeigt auf Linie 39 (scope.Connect()). Es würde mich überhaupt nicht wundern, wenn ich einen Parameter einfach verpasst oder etwas falsch formatiert hätte. Ich weiß einfach nicht, was es ist.

UPDATE 3 Umschalten vonSecurityCenter2 zuSecurityCenter ergibt immer noch das gleicheinvalid namespace Error.

UPDATE 4 Ich habe die Konsolen-App auf eine andere Box verschoben (win7, nicht winserver08r2) und sie wurde wie erwartet ordnungsgemäß zurückgemeldet. Es könnte also ein Problem mit der VM sein, auf der ich gerade getestet habe. Der nächste Schritt ist das Auslesen des aktiven / inaktiven Status

UPDATE 5 Es wurde auf einer anderen Server08-Box und der gleichen getestetinvalid namespace Fehler erscheint. VerwendenSecurityCenter anstattSecurityCenter2 behebt das Problem nicht. Gibt es eine zugrunde liegende Sicherheitsfunktion, die das Windows Server-Betriebssystem verwendet, um Manipulationen an Firewalls zu verhindern, oder wird das Server-Betriebssystem nicht mit einem bestimmten Schlüsselsatz von WMI-Funktionen geliefert?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage