Como bloquear uma porta por um horário específico?

Como bloquear uma porta por um horário específico?

Quero bloquear uma porta por um período específico, digamos, da 1h às 3h. Posso adicionar uma regra ao firewall integrado, mas isso bloqueia a porta o tempo todo. Existe alguma maneira de fazer isso apenas por um período específico de tempo?

Responder1

Não. Não é possível, a menos que você crie seu próprio script VBS para automatizar com o Agendador de Tarefas. Para o qual você precisa implementar a API do Firewall do Windows. Se você fizer um script poste. Seria de imensa ajuda para outros.

Responder2

Finalmente encontrei uma solução. Primeiro adicione uma regra para bloquear o aplicativo desejado no firewall. Então a regra pode ser habilitada ou desabilitada usando o comando:

netsh advfirewall firewall set rule name="MyRule" new enable=yes

Isso pode ser adicionado a um script que verifica periodicamente a hora e ativa/desativa o MuRule de acordo. Não consegui encontrar o comando sleep no script em lote e não conheço o PowerShell, então escrevi um programa C++ simples.

#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 e execute no logon usando o Agendador de tarefas com privilégio de administrador.

informação relacionada