C++添加防火墙例外——检测目标程序不在例外列表时才进行添加,防止重复添加

本文介绍了一种通过编程方式自动检测并添加程序到防火墙例外规则的方法,避免了手动配置的繁琐,确保程序在网络通信时不受防火墙阻拦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序常通过网络进行通信,有时某些通信端口会被防火墙阻止导致程通信异常,一般情况要关闭防火墙或配置白名单比较麻烦。每次启动通过cmd命令添加防火墙例外可能造成程序经常使用从而多次重复添加同一规则,或程序考到磁盘的不同位置还要重新添加例外规则等。楼主比较懒所以写个简单demo,先查询防火墙,如果白名单中没有目标程序则将其名称和路径添加到例外规则中,如果目标程序已经存在于防火墙例外规则中则直接返回防止重复添加。

代码如下:

#include "stdafx.h"
#include <iostream>

using namespace std;

bool FirewallSet(string dir, string name)
{

	// chcp 437 这个命令把操作系统默认语言强制转换成英文显示,便于解析。
	string filedir = dir;
	string cmd = "chcp 437 && netsh advfirewall firewall show rule name =";//先查询程序是否在防火墙白名单中
	cmd.append(name);
	cmd += " verbose";
	char PipeResult[1024] = { 0 };
	char buffer[128] = { 0 };
	// 通过管道调用命令
	FILE *pPipe;
	if (NULL == (pPipe = _popen(cmd.c_str(), "rt")))
	{
		printf("error!");
		return false;
	}

	while (fgets(buffer, 128, pPipe))
	{
		strcat(PipeResult, buffer);
		if (strstr(PipeResult, filedir.c_str()) != NULL)
		{
			_pclose(pPipe);
			return true;
		}

	}
	cmd = "chcp 437 && netsh advfirewall firewall add rule name =";
	cmd += name;
	cmd.append(" dir = in action = allow program = \"");//拼接所需传输的命令
	cmd += filedir;
	cmd.append("\"");
	if (NULL == (pPipe = _popen(cmd.c_str(), "rt")))
	{
		printf("error!");
		return false;
	}
	// 打印结果
	printf("%s", PipeResult);
	_pclose(pPipe);
	return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
	bool flag = FirewallSet("C:\\windows\\test\\123.exe","123");//将C:\\windows\\test\\123.exe加入防火墙白名单,规则名为123

	if (flag)
	{
		cout << "Firewall Set Successful !" << endl;
	}
	else
	{
		cout << "FAILED !" << endl;
	}

	system("pause");
	return 0;
	
}

demo下载地址:https://download.youkuaiyun.com/download/wangx_x/11590112

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值