转自:http://www.cnblogs.com/Arrow-Lu/articles/2515332.html

很多时候,我们的程序是通过网络通信(如TCP或者UDP协议+端口),而将制作好的程序安装包给客户用时,发现会出现不能通信的现象(或者在这台电脑是可以的,却在另一台不可以),原因是防火墙阻止了,需要添加防火墙例外。现在将代码记录下来,方便以后备用。

在Visual studio 项目引用右键里面添加引用,选中COM然后找到NetFwTypeLib,确认,然后新建类FireWallHelp.cs添加

using NetFwTypeLib;

代码如下

using System;
using System.Collections.Generic;
using System.Text;
using NetFwTypeLib;namespace FireWallTest { public class FireWallHelp { /// <summary> /// 添加防火墙例外端口 /// </summary> /// <param name="name">名称</param> /// <param name="port">端口</param> /// <param name="protocol">协议(TCP、UDP)</param> public static void NetFwAddPorts(string name, int port, string protocol) { //创建firewall管理类的实例 INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr")); INetFwOpenPort objPort = (INetFwOpenPort)Activator.CreateInstance( Type.GetTypeFromProgID("HNetCfg.FwOpenPort")); objPort.Name = name; objPort.Port = port; if (protocol.ToUpper() == "TCP") { objPort.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; } else { objPort.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; } objPort.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL; objPort.Enabled = true; bool exist = false; //加入到防火墙的管理策略 foreach (INetFwOpenPort mPort in netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts) { if (objPort == mPort) { exist = true; break; } } if (exist) { System.Windows.Forms.MessageBox.Show("exist"); } if (!exist) netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(objPort); } /// <summary> /// 将应用程序添加到防火墙例外 /// </summary> /// <param name="name">应用程序名称</param> /// <param name="executablePath">应用程序可执行文件全路径</param> public static void NetFwAddApps(string name, string executablePath) { //创建firewall管理类的实例 INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr")); INetFwAuthorizedApplication app = (INetFwAuthorizedApplication)Activator.CreateInstance( Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication")); //在例外列表里,程序显示的名称 app.Name = name; //程序的路径及文件名 app.ProcessImageFileName = executablePath; //是否启用该规则 app.Enabled = true; //加入到防火墙的管理策略 netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app); bool exist = false; //加入到防火墙的管理策略 foreach (INetFwAuthorizedApplication mApp in netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications) { if (app == mApp) { exist = true; break; } } if (!exist) netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app); } /// <summary> /// 删除防火墙例外端口 /// </summary> /// <param name="port">端口</param> /// <param name="protocol">协议(TCP、UDP)</param> public static void NetFwDelApps(int port, string protocol) { INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr")); if (protocol == "TCP") { netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove(port, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP); } else { netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove(port, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP); } } /// <summary> /// 删除防火墙例外中应用程序 /// </summary> /// <param name="executablePath">程序的绝对路径</param> public static void NetFwDelApps(string executablePath) { INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr")); netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(executablePath); } } }

转载于:https://www.cnblogs.com/-sylar/p/8404839.html

【转】C# 操作系统防火墙相关推荐

  1. 彻底关闭银河麒麟操作系统防火墙

    彻底关闭银河麒麟操作系统防火墙 先将登录账户切换到root账户 注意使用sudo获取root权限是无法成功执行命令的,必须先使用su命令切换 第一次给root账户设置密码: $ sudo passwd ...

  2. centos 对某ip开放 防火墙端口_CentOS操作系统防火墙Firewalld记录日志及用途

    CENTOS FIREWALLD防火墙学习笔记(九)- Firewalld配置记录日志及用途 CentOS操作系统中Firewalld防火墙默认是不记录日志的,如果服务器性能允许,可以通过修改配置文件 ...

  3. linux weblogic 防火墙,本地访问weblogic控制台无反应,关闭linux操作系统防火墙

    有时候,我们在Linux操作系统上成功启动了weblogic,也查看了7001端口的状态是开启的.但是访问weblogic控制台没有反应,也没有报错. 使用 netstat -ano | grep 7 ...

  4. Windows Server 操作系统 防火墙添加端口例外

    路径:控制面板-显示方式(大图标)-防火墙-高级设置-入站规则-添加规则-配置端口保存 具体如图:

  5. win与Linux的防火墙配置

    操作系统防火墙 Windows防火墙 问题 Linux防火墙 iptables 参考链接 firewall Windows防火墙 环境: OS 名称: Microsoft Windows 10 家庭中 ...

  6. 硬件防火墙和软件防火墙有什么区别

    防火墙分为软件防火墙和硬件防火墙两种. 软件防火墙是安装在PC平台的软件产品,它通过在操作系统底层工作来实现网络管理和防御功能的优化. 但对国内市场上的硬件防火墙产品介绍仔细研读后,记者发现,对于硬件 ...

  7. 信息安全-防火墙技术原理与应用

    一.防火墙概述 1.1 防火墙概念 为了应对网络威胁,联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离 方法:根据网络的安全信任程度和需要保护的对象,人为划分若干安全区域,包括: 公共外部网 ...

  8. 【Linux网络安全】Linux操作系统安全配置(超全超详细)

    Linux操作系统安全配置 一.服务相关命令 systemctl enable 服务名 #开机自启动 systemctl disable 服务名 #禁用开机自启动 systemctl stop 服务名 ...

  9. Windows服务器防火墙端口怎么开放?扬州服务器租用140.210.20.X

    什么是端口? 我们平时所说的端口其实不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口.本地操作系统会给那些有需求的进程分配一个端口.当目的主机接收到数据包后,将根据报文首部 ...

最新文章

  1. 无脑单细胞竟会走迷宫、规划交通路线,这种难以归类的生物重定义了智能
  2. boost源码剖析之:多重回调机制signal(上)
  3. Ceph分布式存储学习指南1.10 iRODS
  4. 支付宝一键清除首页各种广告
  5. 2019中国企业500强榜单发布:涉及76个行业
  6. 在 Xcode 中进行自动化测试 (2/2)
  7. postman压力测试_如何用Postman简单做接口自动化
  8. Windows安装pytorch-cpu
  9. (转)[Cocoa]深入浅出 Cocoa 之 Framework
  10. 语音识别控制设计之声控小汽车的实现
  11. 有关字符串的算法(KMP,Manacher,BM)陆续补充
  12. [译]Quartz.NET 框架 教程(中文版)2.2.x 之第五课 SimpleTrigger
  13. information_schema.profiling学习
  14. 将两个顺序表合并为一个新的顺序表
  15. 怎么开通PayPal支付?PayPal支付账号申请流程步骤
  16. 嵌入式和单片机,两者的区别
  17. 2021年特种设备安全管理(全国特种设备安全管理人员模拟考试题库一)安考星
  18. 余淼杰老师 经济学原理复习笔记(微观)
  19. 大数据系列(一)之hadoop介绍及集群搭建
  20. 如何在公众号添加视频链接

热门文章

  1. PHP curl采集
  2. vue.js 三种方式安装--npm安装
  3. 创建第一个Django项目
  4. [UE4]自动旋转组件
  5. java中让数据生成excle文件并且支持下载
  6. 08. 函数和流程控制
  7. JavaScript对Json的增删改属性
  8. 类的继承私有成员问题
  9. .NET开发者必备的工具箱
  10. PHP100视频教程2012版解压密码