¿Cómo bloquear un puerto por un tiempo específico?

¿Cómo bloquear un puerto por un tiempo específico?

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.

información relacionada