Quiero bloquear un puerto durante un tiempo específico, digamos de 1 am a 3 am. Puedo agregar una regla al firewall integrado, pero esto bloquea el puerto todo el tiempo. ¿Hay alguna manera de hacer esto sólo por un período de tiempo específico?
Respuesta1
No. No es factible a menos que cree su propio script VBS para automatizarlo con el Programador de tareas. Para lo cual necesita implementar la API del Firewall de Windows. Si haces un guión, publícalo. Sería de inmensa ayuda para otros.
Respuesta2
Finalmente encontré una solución. Primero agregue una regla para bloquear la aplicación deseada en el firewall. Luego la regla se puede habilitar o deshabilitar usando el comando:
netsh advfirewall firewall set rule name="MyRule" new enable=yes
Esto se puede agregar a un script que verifica periódicamente la hora y habilita/deshabilita MuRule en consecuencia. No pude encontrar el comando de suspensión en el script por lotes y no conozco PowerShell, así que escribí un programa simple en C++.
#include<ctime>
#include<windows.h>
using namespace std;
int main()
{//code for hiding console
HWND window;
AllocConsole();
window = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(window,0);
Sleep(60*1000);// 1 min delay
time_t now;
struct tm *current;
now = time(0);
while(1)
{
current = localtime(&now);
if(current->tm_hour>=22||current->tm_hour<=6) // 10 pm to 6 am
system ("netsh advfirewall firewall set rule name=\"MyRule\" new enable=yes");
else
system ("netsh advfirewall firewall set rule name=\"MyRule\" new enable=no");
Sleep(10*60*1000);// 10 min delay
}
return 0;
}
Compile usando gcc y ejecútelo al iniciar sesión usando el Programador de tareas con privilegios de administrador.