Desde el Service Pack 2, Windows XP trae de serie un cortafuegos, que viene activado por defecto.

Desactivarlo o configurarlo, no es un proceso complicado de hacer, pero es cierto que no todos los usuarios de Windows, tienen los conocimientos o la motivación necesaria para nadar por el Centro de seguridad de Windows, y adentrarse en la configuración del Firewall.

La solución es poder activar, desactivar, o modificar las reglas de bloqueo de los puertos programaticamente, haciéndolo algo transparente para el usuario final, y por tanto, permitiendo que nuestra aplicación funcione sin problemas.

Programar algo así, a priori parece tremendamente largo.

No es así, mediante el objeto Firewall Manager, todo el proceso se hace de forma tremendamente sencilla. Tanto, que asusta las implicaciones de seguridad que podría tener en el software malintencionado.

Para empezar, lo mejor es dirigirse al artículo de Microsoft: Compatibilidad de aplicaciones con Windows XP Service Pack 2. Secuencias de comandos complementarias. En él se recopilan montones de Secuencias de comandos en VBScript que permiten modificar el comportamiento de Windows XP SP2, para hacerlo lo más similar, y por tanto compatible a Windows XP. A saber: Configuración de Internet Explorer, Outlook Express, Firewall de Windows, Administración remota, …

En mi caso, he partido de FwEnable.vbs, para posteriormente añadirle que se muestre el estado del firewall (activado/desactivado), y finalmente pregunte al usuario si desea activarlo o desactivarlo.

Siendo el resultado en pantalla, es algo similar a:

Al final el código completo queda así:

On Error Resume Next

'Create Shell object
Set oScript = CreateObject("WScript.Shell")

'Create the firewall manager object.
Set oFirewallManager = CreateObject("HNetCfg.FwMgr")

If Err <> 0 Then
oScript.Echo "ERROR: Firewall de Windows no instalado, o imposible acceder a él."
Else
'Get the current profile for the local firewall policy.
Set oProfile = oFirewallManager.LocalPolicy.CurrentProfile
'Is firewall enabled?
If oProfile.FirewallEnabled = True Then
sStatus = "ACTIVADO"
Else
sStatus = "DESACTIVADO"
End If
iAnswer = oScript.Popup("El Firewall de Windows está actualmente " & sStatus & "." & _
vbCrLf & vbCrLf & "¿Desea desactivarlo?" & _
vbCrlf & "Escoja Sí para desactivarlo; No para activarlo; o Cancelar para dejarlo sin cambios.", _
-1, "Firewall de Windows", 3+32)
If iAnswer = 6 Then
oProfile.FirewallEnabled = False
ElseIf iAnswer = 7 Then
oProfile.FirewallEnabled = True
End If
End If
Set oProfile = Nothing
Set oFirewallManager = Nothing
Set oScript = Nothing

Para tu comodidad, puedes descargar el programa (1 Kb. en formato VBS). Si por restricciones de seguridad te es imposible descargarlo, lo tienes también en formato ZIP (1 Kb.).