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.