我想在特定时间段内封锁某个端口,比如凌晨 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 进行编译并在登录时使用具有管理员权限的任务计划程序运行。