Как заблокировать порт на определенное время?

Как заблокировать порт на определенное время?

Я хочу заблокировать порт на определенный период времени, скажем, с 1 до 3 утра. Я могу добавить правило во встроенный брандмауэр, но это блокирует порт все время. Есть ли способ сделать это только на определенный период времени?

решение1

Нет. Это невозможно, если вы не создадите свой собственный скрипт VBS для автоматизации с помощью планировщика задач. Для чего вам нужно реализовать API брандмауэра Windows. Если вы сделаете скрипт, опубликуйте его. Это будет огромной помощью для других.

решение2

Наконец я нашел решение. Сначала добавьте правило для блокировки нужного приложения в брандмауэре. Затем правило можно включить или отключить с помощью команды:

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

Это можно добавить в скрипт, который периодически проверяет время и соответственно включает/отключает MuRule. Я не смог найти команду sleep в пакетном скрипте и не знаю PowerShell, поэтому написал простую программу на 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;
}

Скомпилируйте с помощью gcc и запустите при входе в систему с помощью планировщика задач с правами администратора.

Связанный контент