特定の時間ポートをブロックするにはどうすればいいですか?

特定の時間ポートをブロックするにはどうすればいいですか?

午前 1 時から午前 3 時までなど、特定の時間だけポートをブロックしたいです。組み込みのファイアウォールにルールを追加できますが、これではポートが常にブロックされてしまいます。これを特定の時間だけ実行する方法はありますか?

答え1

いいえ。タスク スケジューラで自動化する独自の VBS スクリプトを作成しない限り、実行できません。そのためには、Windows ファイアウォール API を実装する必要があります。スクリプトを作成したら、投稿してください。他の人にとって非常に役立つでしょう。

答え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 を使用してコンパイルし、管理者権限でタスク スケジューラを使用してログオン時に実行します。

関連情報