Я работаю над проверкой брандмауэров. Следующий код довольно легко проверяет состояние брандмауэра 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? Если брандмауэр правильно интегрирован, будет ли описанная выше проверка работать одинаково или есть лучший способ для этого? Я проверил это сообщение: С# Настройки центра безопасности Windows и этот пост: С# - Как включить chceck, если включен внешний брандмауэр?, но оба оказались относительно бесполезными.
Я изучал API WMI, но пока это довольно запутанно, и документация через MSDN не была слишком многообещающей. Я также пробовал общаться с SelectQuery, но до сих пор я не увенчался успехом. Может ли кто-нибудь помочь мне в новой отправной точке или где я мог бы найти лучшую документацию/инструкции относительно сторонних брандмауэров?
EDIT: В настоящее время я изучаю далее 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?