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

程序常通过网络进行通信,有时某些通信端口会被防火墙阻止导致程通信异常,一般情况要关闭防火墙或配置白名单比较麻烦。每次启动通过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.csdn.net/download/wangx_x/11590112

用户账户控制(UAC)白名单的设置 Windows7下 UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员?密码。通过在这些操作启动前对其进行验证,UAC 可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改。 从Vista开始,微软开始这一新的安全工具吧,算是。对于一部分非法程序,UAC确实可以在一定程度上对其进行防范。但是,对于很多用户来说,这个功能也带来了很多困扰。 所以就想有没有白名单之类的功能,可以将我们信任的程序直接允许运行。答案是有的。但是微软没有自带,哈哈。 网上的答案绝大多数都是停止UAC,废话,如果想停止的话就不会有人问这个问题了。 可以通过微软公司出品的Microsoft Application Compatibility Toolkit 5.6将信任程序加入系统白名单。 下载Application Compatibility Toolkit 安装成功有三个程序 以管理员的权限运行Compatibility Administrator 在Custom DataBases中新建数据库,添加一个Application Fix(下面空白出点击右键,creat new) 添上你的程序名,版本,程序路径 选择none 下一步 选中RunAsInvoker 完成 在菜单栏里选择file->save。。。保存为一个sdb文件 file->install
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值