Pracuję nad sprawdzeniem zapory ogniowej. Poniższy kod dość łatwo sprawdza stan domyślny Zapora systemu Windows:Sprawdź zapory innych firm na komputerze
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;
}
Staje się pytanie: Jak mogę znaleźć status niż Windows Firewall? Jeśli zapora jest poprawnie zintegrowana, czy powyższy sprawdzian działa tak samo, czy jest na to lepsza metoda? Sprawdziłem ten wpis: C# Windows Security Center Settings i ten wpis: C# - How to chceck if external firewall is enabled?, ale oba okazały się stosunkowo pomocne.
Zajmuję się API WMI, ale jest to dość mylące do tej pory, a dokumentacja za pośrednictwem MSDN nie była zbyt obiecująca. Próbowałem też zadzierać z SelectQuery, ale jak dotąd nie udało mi się. Czy ktoś może mi pomóc w nowym punkcie wyjścia lub w miejscu, w którym mógłbym znaleźć lepszą dokumentację/instrukcje dotyczące zapór zewnętrznych?
EDIT: Obecnie jestem zwiedzania dalej do WMI, a konkretnie klasę FirewallProduct
jak sugeruje stanowisku.
UPDATE 2: I zostały testowanie następujący fragment:
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);
Ale działa to prowadzi do następującego błędu: Exception Invalid namespace
i wskazuje na linii 39 (scope.Connect()
). Nie byłbym wcale zaskoczony, gdybym po prostu pominął parametr lub sformatował coś niewłaściwie, po prostu nie wiem, co to jest.
UPDATE 3 Przejście z SecurityCenter2
do SecurityCenter
wciąż daje ten sam invalid namespace
błąd.
AKTUALIZACJA 4 Przeniosłem aplikację konsoli na inne pudełko (win7 not winserver08r2) i poprawnie zgłoszono ją zgodnie z oczekiwaniami. Może to być problem z maszyną wirtualną, którą obecnie testowałem. Następnym krokiem jest do analizowania na aktywny/status nieaktywnych Pojawia UPDATE 5 Został on przetestowany na innym polu Server08 i tym samym invalid namespace
błędu
. Używanie SecurityCenter
zamiast SecurityCenter2
nie rozwiązuje problemu. Czy istnieje pewna podstawowa funkcja zabezpieczeń, której używa Windows Server OS, aby zapobiec manipulowaniu zaporami ogniowymi, czy też systemowi operacyjnemu serwera nie dostarczono określonego zestawu kluczy funkcji WMI?
Możesz zajrzeć na tę stronę http: //www.codeproject.com/Articles/37714/Software-Development-Build-your-own-Windows-Securi Trzy odnośniki na dole również wskazują na przydatne strony. – Gary
Przestrzeń nazw 'SecurityCenter2' przeznaczona jest dla systemów Windows Vista, 7 i 8, dla XP musisz używać przestrzeni nazw' SecurityCenter'. – RRUZ
@wjhguitarman - Dlaczego musisz wykrywać, czy firewall jest zainstalowany? –