Проверьте наличие сторонних брандмауэров на компьютере
Я работаю над проверкой брандмауэров. Следующий код довольно легко проверяет состояние брандмауэра 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 и этот пост:Как проверить, если внешний брандмауэр включен? но оба оказались относительно бесполезными.
Я изучал 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 Переключение сSecurityCenter2
вSecurityCenter
все еще дает то же самоеinvalid namespace
ошибка.
ОБНОВЛЕНИЕ 4 Я переместил консольное приложение в другое окно (win7, а не winserver08r2), и оно правильно отчиталось, как и ожидалось. Так что это может быть проблема с виртуальной машиной, на которой я сейчас тестирую. Следующим шагом является анализ активного / неактивного статуса.
ОБНОВЛЕНИЕ 5 Он был протестирован на другой коробке Server08 и той жеinvalid namespace
появляется ошибка С помощьюSecurityCenter
вместоSecurityCenter2
не решает проблему. Есть ли какая-то базовая функция безопасности, используемая ОС Windows Server для предотвращения вмешательства в брандмауэры, или же серверная ОС не поставляется с определенным набором ключей WMI?