Я работаю над проверкой брандмауэров. Следующий код довольно легко проверяет состояние брандмауэра 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 и этот пост: C# - Как проверить, включен ли внешний брандмауэр? но оба оказались относительно бесполезными.
Я изучал 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?
SecurityCenter2
предназначено для Windows Vista, 7 и 8, для XP необходимо использовать пространство именSecurityCenter
. - person RRUZ   schedule 29.11.2012