2012-11-28 58 views
13

मैं फ़ायरवॉल के लिए चेक करने पर काम कर रहा हूं। निम्नलिखित कोड काफी आसानी से डिफ़ॉल्ट 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? लेकिन दोनों अपेक्षाकृत अनुपयोगी साबित हुए।

मैं डब्लूएमआई एपीआई में देख रहा हूं लेकिन यह अब तक बहुत भ्रमित है, और एमएसडीएन के माध्यम से दस्तावेज बहुत ही आशाजनक नहीं रहा है। मैंने SelectQuery के साथ गड़बड़ करने का भी प्रयास किया है लेकिन अब तक मैं असफल रहा हूं। क्या कोई मुझे एक नए शुरुआती बिंदु में सहायता कर सकता है या जहां मैं तृतीय पक्ष फ़ायरवॉल से संबंधित बेहतर दस्तावेज़ीकरण/निर्देश ढूंढ सकता हूं?

संपादित करें: वर्तमान में मैं डब्लूएमआई में आगे की खोज कर रहा हूं, विशेष रूप से कक्षा 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()) लाइन के लिए अंक। मैं आश्चर्यचकित नहीं होगा अगर मैंने बस पैरामीटर को याद किया है या कुछ गलत तरीके से स्वरूपित किया है, तो मुझे नहीं पता कि यह क्या है।

अद्यतन 3SecurityCenter2SecurityCenter करने से स्विच कर अब भी वही invalid namespace त्रुटि अर्जित करता है।

अद्यतन 4 मैंने कंसोल ऐप को एक अलग बॉक्स (Win7 नहीं winserver08r2) पर ले जाया और यह उचित रूप से अपेक्षित रूप से वापस रिपोर्ट किया गया। तो यह वीएम के साथ एक मुद्दा हो सकता है जिसे मैं वर्तमान में परीक्षण कर रहा हूं। अगला चरण सक्रिय/निष्क्रिय स्थिति को पार्स करना है

अद्यतन 5 यह किसी अन्य Server08 बॉक्स पर परीक्षण किया गया था और उसी invalid namespace त्रुटि प्रकट होती है। SecurityCenter2 के बजाय SecurityCenter का उपयोग करना इस समस्या को हल नहीं करता है। क्या फ़ायरवॉल के साथ छेड़छाड़ रोकने के लिए कुछ अंतर्निहित सुरक्षा सुविधा विंडोज सर्वर ओएस का उपयोग है, या क्या सर्वर ओएस WMI सुविधाओं के एक विशिष्ट कुंजी सेट के साथ नहीं आया है?

+1

आप इस पृष्ठ को http: //www.codeproject का पता लगाना चाहेंगे।कॉम/आलेख/37714/सॉफ्टवेयर-डेवलपमेंट-बिल्ड-अपना-विंडोज-सिकुरी नीचे दिए गए तीन संदर्भ लिंक कुछ उपयोगी पृष्ठों को इंगित करते हैं। – Gary

+1

'VistaCenter2' नेमस्पेस Windows Vista, 7 और 8 के लिए है, XP के लिए आपको' सुरक्षा केंद्र 'नामस्थान का उपयोग करना होगा। – RRUZ

+0

@wjhguitarman - फ़ायरवॉल स्थापित होने पर आपको यह पता लगाने की आवश्यकता क्यों है? –

उत्तर

10

According to Microsoft Q: How does Windows Security Center detect third-party products and their status?

A: Windows Security Center uses a two-tiered approach for detection status. One tier is manual, and the other tier is automatic through Windows Management Instrumentation (WMI). In manual detection mode, Windows Security Center searches for registry keys and files that are provided to Microsoft by independent software manufacturers. These registry keys and files let Windows Security Center detect the status of independent software. In WMI mode, software manufacturers determine their own product status and report that status back to Windows Security Center through a WMI provider. In both modes, Windows Security Center tries to determine whether the following is true:

  • An antivirus program is present.
  • The antivirus signatures are up-to-date.
  • Real-time scanning or on-access scanning is turned on for antivirus programs.
  • For firewalls, Windows Security Center detects whether a third-party firewall is installed and whether the firewall is turned on or not.

तो तुम अगर एक तीसरे पक्ष फ़ायरवॉल स्थापित किया गया है, FirewallProduct वर्ग का उपयोग कर निर्धारित करने के लिए WMI का उपयोग कर सकते, कुछ समय पहले मैं इस विषय जो वर्णन करती हैं कि इस जानकारी WMI का उपयोग कर प्राप्त के बारे में एक लेख लिखा था।

वर्तमान नमूना सी # को वर्तमान तृतीय पक्ष फ़ायरवॉल नाम और राज्य स्थापित करने के लिए प्रयास करें।

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(); 
     } 
    } 
} 
+0

वाह आपको निश्चित रूप से आपकी सामग्री पता है! मैं आपके उदाहरण का परीक्षण करने के बीच में हूं, लेकिन सिर्फ कॉपी-पेस्टिंग के हित में नहीं, मेरे पास एक प्रश्न है, 'कंसोल। राइटलाइन' में "{0, -35} {1, -40}" क्या है इसका उद्देश्य क्या है? – wjhguitarman

+1

@wjhguitarman वे सिर्फ प्रारूपण विकल्प हैं ताकि यह अच्छी तरह से दिखाई दे। –

+0

मैंने आपके ब्लॉग लिंक पर और अधिक पढ़ा है, और मुझे बहुत जल्द होना चाहिए, इस पूरे समय मैं इसे सर्वर 2008 पर काम करने का प्रयास कर रहा हूं, यह नहीं जानता कि यह केवल डेस्कटॉप संस्करणों के लिए है :( – wjhguitarman