3

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

2 ответа2

2

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .