Compruebe si hay firewalls de terceros en una máquina
Estoy trabajando en hacer un cheque para Firewalls. El siguiente código comprueba fácilmente el estado del Firewall de Windows predeterminado:
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;
}
La pregunta entonces es: ¿Cómo puedo encontrar el estado de un Firewall que no sea de Windows? Si el Firewall está correctamente integrado, ¿funcionará igual la comprobación anterior o hay un método mejor para hacerlo? He revisado este post:Configuración de C # Windows Security Center y este post:C # - ¿Cómo verificar si el firewall externo está habilitado? pero ambos demostraron ser relativamente inútiles.
He estado buscando en la API de WMI pero hasta ahora es bastante confuso, y la documentación a través de MSDN no ha sido demasiado prometedora. También he intentado perder el tiempo conSelectQuery Pero hasta ahora no he tenido éxito. ¿Alguien puede ayudarme en un nuevo punto de partida o donde pueda encontrar una mejor documentación / instrucciones sobre los firewalls de terceros?
EDITAR: Actualmente estoy explorando más en WMI, específicamente la claseFirewallProduct
como lo sugiere un post.
ACTUALIZACIÓN 2: He estado probando el siguiente fragmento de código:
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);
Pero ejecutando esto resulta en el siguiente error:Exception Invalid namespace
y apunta a la línea 39 (scope.Connect()
). No me sorprendería en absoluto si simplemente omito un parámetro o formatee algo incorrectamente, simplemente no sé qué es.
ACTUALIZACIÓN 3 Cambiando deSecurityCenter2
aSecurityCenter
todavia da lo mismoinvalid namespace
error.
ACTUALIZACIÓN 4 Moví la aplicación de la consola a una caja diferente (win7 no winserver08r2) y se informó correctamente como se esperaba. Por lo tanto, puede ser un problema con la máquina virtual en la que actualmente he estado probando. El siguiente paso es analizar el estado activo / inactivo
Actualización 5 Fue probado en otra caja Server08 y el mismoinvalid namespace
aparece el error UtilizandoSecurityCenter
en lugar deSecurityCenter2
No resuelve el problema. ¿Hay alguna característica de seguridad subyacente que utiliza el sistema operativo Windows Server para evitar la manipulación indebida de firewalls, o el sistema operativo del servidor no incluye un conjunto de teclas específico de características de WMI?