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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用户账户控制(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
C++桌面应用程序中添加按钮和文本框可以使用MFC控件库。下面是添加按钮和文本框的步骤: 1. 创建一个MFC项目。在Visual Studio中选择“新建项目”->“Visual C++”->“MFC应用程序”,然后选择“桌面应用程序”模板,点击“确定”按钮创建项目。 2. 在资源视图中添加按钮和文本框控件。打开资源视图,右键单击“对话框”,选择“添加控件”,然后选择“按钮”或“编辑框”,将它们拖放到对话框中。 3. 为按钮和文本框添加控件变量。在对话框编辑模式下,双击按钮或文本框控件,打开属性窗口,选择“控件变量”选项卡,然后点击“添加变量”按钮,创建一个控件变量。 4. 在代码中添加事件处理程序。在类视图中双击对话框类,打开类的源文件,找到对应的控件变量,然后添加事件处理程序。例如,对于按钮控件,可以添加一个OnClick事件处理程序,在该函数中编写按钮被点击时的逻辑代码。 下面是添加按钮和文本框的示例代码: ```cpp // 声明按钮和文本框控件变量 CButton m_button; CEdit m_edit; // 控件变量映射表 BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, OnClickButton) END_MESSAGE_MAP() // 按钮点击事件处理程序 void CMyDialog::OnClickButton() { // 在文本框中显示一句话 m_edit.SetWindowText(_T("Hello World!")); } ``` 在这个示例代码中,我们创建了一个按钮控件和一个文本框控件,在OnClickButton函数中,当按钮被点击时会在文本框中显示一句话。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值