7

Jak wykryć (z aplikacji Windows Forms napisanej w języku C#), czy produkt zapory jest włączony?Jak wykryć, czy produkt zapory jest włączony?

Oto mój kod i otrzymuję błąd na INetFwMgr tego typu lub obszaru nazw nie mógł znaleźć

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 


     private const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}"; 

     INetFwMgr manager = GetFireWallManager(); 
     bool isFirewallEnabled = manager.LocalPolicy.CurrentProfile.FirewallEnabled; 



     private static INetFwMgr GetFireWallManager() 
     { 
      Type objectType = Type.GetTypeFromCLSID(new Guid(CLSID_FIREWALL_MANAGER)); 
      return Activator.CreateInstance(objectType) as INetFwMgr; 
     } 
     private void button1_Click(object sender, EventArgs e) 
     { 



      if (isFirewallEnabled == false) 
      { 
       MessageBox.Show("Firewall is not enabled."); 
      } 
      else 
      { 
       MessageBox.Show("Firewall is enabled."); 
      } 

     } 
    } 
} 
+0

Brakuje dyrektywy użycia? – CRoshanLG

+0

Tak. Jak to rozwiązać? –

+0

Dodaj przestrzeń nazw Microsoft.TeamFoundation.Common do kodu. Zobacz dodatek w mojej odpowiedzi. – CRoshanLG

Odpowiedz

2

Wystarczy popatrzeć na to pytanie tutaj o antywirusowego How to detect antivirus installed on windows 2003 server and 2008 server 2003 server R2and 2008 server R2 using WMI or other then WMI in C++ samo wywołanie API mogą być używane do wykrywania ustawienia zapory sieciowej za pomocą wyliczenia WSC_SECURITY_PROVIDER_FIREWALL. Odpowiedź na to pytanie jest błędna, ale da ci odpowiedź na komputery niebędące serwerami. Ten kod jest w C++, ale jest to po prostu wywołanie interfejsu Windows, którego potrzebujesz, możesz też wywołać to z C#.

+0

Należy zauważyć, że spowoduje to wykrycie tylko działających aplikacji zapory sieciowej. Nie będzie (i nie może) wykrywać urządzeń firewall i tym podobnych. – Donnie

+0

Nie, ale nie podam znaczników na to pytanie (Windows-firewall, itp.) Zakładam, że OP oznacza lokalną zaporę sieciową. –

+0

Prawdopodobnie próbowałem być kompletny. – Donnie

3
NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); 
INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType); 
bool Firewallenabled = mgr.LocalPolicy.CurrentProfile.FirewallEnabled; 

Aby uzyskać szczegółowe informacje, patrz link.

http://technet.microsoft.com/en-us/library/cc737845%28WS.10%29.aspx

http://blogs.msdn.com/b/securitytools/archive/2009/08/21/automating-windows-firewall-settings-with-c.aspx

+0

Dzięki to działa dla mnie –

+0

Zobacz odpowiedź Jeetendry Negi poniżej, w jaki sposób uzyskać ten kod do kompilacji. –

1

Najpierw musisz dodać następujący komponent do projektu

  • INetFwMgr

Następnie uzyskać typ obiektu z Home Networking Configuration Manager CLSID która {304CE942-6E39-40D8-943A-B913C40C9CD4} (Linki do C:\WINDOWS\system32\hnetcfg.dll i można go znaleźć pod adresem HKEY_CLASSES_ROOT\CLSID\{304CE942-6E39-40D8-943A-B913C40C9CD4}) i użyć typu zebranego w celu utworzenia instancji przy użyciu domyślnego konstruktora typu jako nowego INetFwMgr, który będzie używany do wykrywania, czy firewall jest enab Doprowadziło lub nie stosując INetFwMgr.LocalPolicy.CurrentProfile.FirewallEnabled która zwraca bool

private const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}"; //This is the CLSID of Home Networking Configuration Manager. We'll use this to detect whether the Firewall is enabled or not 
private static NetFwTypeLib.INetFwMgr GetHNCMType() 
{ 
    Type objectType = Type.GetTypeFromCLSID(new Guid(CLSID_FIREWALL_MANAGER)); //Creates a new GUID from CLSID_FIREWALL_MANAGER getting its type as objectType 
    return Activator.CreateInstance(objectType) as NetFwTypeLib.INetFwMgr; //Creates an instance from the object type we gathered as an INetFwMgr object 
} 
static void Main(string[] args) 
{ 
    INetFwMgr manager = GetHNCMType(); //Initializes a new INetFwMgr of name manager from GetHNCMType 
    if (manager.LocalPolicy.CurrentProfile.FirewallEnabled == false) //Continue if the firewall is not enabled 
    { 
     //The firewall is not enabled 
     Console.WriteLine("OFF"); //Writes OFF to the Console in a new line 
    } 
    else //Otherwise: 
    { 
     //The fire wall is enabled 
     Console.WriteLine("ON"); //Writes ON to the Console in a new line 
    } 
} 

Dzięki,
Mam nadzieję, że to pomocny :)


Aby dodać komponent do projektu,

  • Prawy -kliknięcie Referencje z Solution Explorer pod nazwę projektu i wybierz Add Reference ...
  • W zakładce COM wybierz komponent, który chcesz dodać i kliknij OK
+1

Nie znalazłem INETFwMgr Under COM. Teraz Jak mogę dodać ten komponent? –

+0

Błąd Nie można znaleźć nazwy typu lub przestrzeni nazw "INetFwMgr" (czy brakuje instrukcji użycia lub odniesienia do zespołu?) \t c: \ users \ administrator.mustepune \ documents \ visual studio 2010 \ Projects \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs \t Otrzymuję ten błąd –

1

wiem, że to stary post, ale znalazłem świetne rozwiązanie!
Czytaj klucz rejestru stanu zapory znaleziono w:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ SharedAccess \ Parameters \ FirewallPolicy \ StandardProfile

Klucz: EnableFirewall

public static bool isFirewallEnabled() { 
     try { 
      using (RegistryKey key = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile")) { 
       if (key == null) { 
        return false; 
       } else { 
        Object o = key.GetValue("EnableFirewall"); 
        if (o == null) { 
         return false; 
        } else { 
         int firewall = (int)o; 
         if (firewall == 1) { 
          return true; 
         } else { 
          return false; 
         } 
        } 
       } 
      } 
     } catch { 
      return false; 
     } 
    } 

także można uzyskać wartości dla DomainProfile, PublicProfile i StandardProfile. Możesz także uzyskać FirewallRules.

Mam nadzieję, że to pomoże :)

1

tylko importować refrences z C: //windows/system32/hnetcfg.dll i C: //windows/system32/FirewallAPI.dll

następnie użyć

using NATUPNPLib; 
using NETCONLib; 
using NetFwTypeLib;