针对将特定端口加入到windows系统的防火墙中,使其允许或禁止通过防火墙。其大概思路是:

 /// <summary>
/// 添加防火墙例外端口
/// </summary>
/// <param name="name">名称</param>
/// <param name="port">端口</param>
/// <param name="protocol">协议(TCP、UDP)</param>
/// <param name="scope">范围类型</param>
/// <param name="remoteAddresses">自定义范围时的IP地址范围</param>
public static void AllowPortsUseFirewall(string name, int port, string protocol, NET_FW_SCOPE_ scope,string remoteAddresses)
{
//创建firewall管理类的实例: Type的GetTypeFromProgID是通过注册表信息项目创建实例类型
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr")); //判断网络类型,是TCP还是UDP
NET_FW_IP_PROTOCOL_ protocolType = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP;
if (protocol.ToUpper() == "TCP")
{
protocolType = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
}
//查找以前是否有相同的规则创建,如果有则不再创建新的规则
foreach (INetFwOpenPort mPort in netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts)
{
if (mPort.Protocol == protocolType && mPort.Port == port)
{
return;
}
}
//创建一个防火墙端口管理实例
INetFwOpenPort objPort = (INetFwOpenPort)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwOpenPort"));
//设置端口实例名称
objPort.Name = name;
//设置端口信息
objPort.Port = port;
//端口管理的网络类型
objPort.Protocol = protocolType;
/*
* NET_FW_SCOPE_ALL 范围是所有地址。
* NET_FW_SCOPE_CUSTOM 自定义范围。
* NET_FW_SCOPE_LOCAL_SUBNET 范围是本地子网。
* NET_FW_SCOPE_MAX 使用仅用于测试。不意味着为应用程序实现。
*/
//端口的范围,针对哪类或哪个IP地址
objPort.Scope = scope;
//此处可以指定IP地址版本信息
//objPort.IpVersion = NET_FW_IP_VERSION_.NET_FW_IP_VERSION_V4;
//自定义IP地址范围
if (objPort.Scope == NET_FW_SCOPE_.NET_FW_SCOPE_CUSTOM)
{
//这而需要移除多个地址之间的空白字符串,有空白字符串会出现设置异常
objPort.RemoteAddresses = remoteAddresses.Replace(" ", ""); ;//"192.168.1.10,192.168.1.12.......";
}
//是否启用规则
objPort.Enabled = true;
//加入到本地防火墙管理规则中。
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(objPort);
}

  删除规则比较简单:创建防火墙实例,直接移除某种通信类型的端口就行。

/// <summary>
/// 删除防火墙例外端口
/// </summary>
/// <param name="port">端口</param>
/// <param name="protocol">协议(TCP、UDP)</param>
public static void DeletePortsUseFirewall(int port, string protocol)
{
//创建firewall管理类的实例: Type的GetTypeFromProgID是通过注册表信息项目创建实例类型
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);
}
}

C# 防火墙操作之特定端口的更多相关文章

  1. C# 防火墙操作之特定程序

    将特定程序加入防火墙组,与将特定端口加入防火墙流程类似.详情见“C# 防火墙操作之特定端口”.其主要代码为: /// <summary> /// 允许应用程序通过防火墙 /// </ ...

  2. Win10如何设置防火墙开放特定端口 windows10防火墙设置对特定端口开放的方法

    Win10防火墙虽然能够很好地保护我们的系统,但同时也会因限制了某些端口,而给我们的操作带了一些不便.对于既想使用某些端口,又不愿关闭防火墙的用户而言,在Win10系统中设置防火墙开放特定端口就非常必 ...

  3. LINUX关闭防火墙、开放特定端口等常用操作

    1. 重启后永久性生效: 开启:chkconfig iptables on 关闭:chkconfig iptables off 2. 即时生效,重启后失效: 开启:service iptables s ...

  4. Linux 防火墙iptables开放特定端口

    1.查看状态:iptables -L -n2.直接编辑:vi /etc/sysconfig/iptables3.端口开放:-A INPUT -m state --state NEW -m tcp -p ...

  5. CentOS 防火墙开放特定端口

    iptables是linux下的防火墙,同时也是服务名称.   service  iptables  status        查看防火墙状态 service  iptables  start   ...

  6. CentOS 配置防火墙操作实例(启、停、开、闭端口):

    CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service   iptables status< ...

  7. Linux 防火墙开放特定端口 (iptables)

    iptables是linux下的防火墙,同时也是服务名称.   service  iptables  status        查看防火墙状态 service  iptables  start   ...

  8. CentOS 配置防火墙操作实例(启、停、开、闭端口)CentOS Linux-FTP/对外开放端口(接口)TomCat相关

    链接地址:http://blog.csdn.net/jemlee2002/article/details/7042991 CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作 ...

  9. CentOS7开启防火墙及特定端口

    开启防火墙服务 以前为了方便,把防火墙都关闭了,因为现在项目都比较重要,害怕受到攻击,所以为了安全性,现在需要将防火墙开启,接下来介绍一下步骤. 1, 首先查看防火墙状态: firewall-cmd ...

随机推荐

  1. uboot第二阶段分析1

    一. uboot第二阶段初识 1.1. uboot第二阶段应该做什么 a. 概括来讲uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗.时钟),然后初始化DDR并且完成重定位. b.  ...

  2. 小白学Python——用 百度翻译API 实现 翻译功能

    本人英语不好,很多词组不认识,只能借助工具:百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢? 百度翻译开放平台: http://api.fanyi.baidu.co ...

  3. 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单

    实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...

  4. 搜索专题: HDU1312Red and Black

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. C#多播委托详解

    包含多个方法的委托成为多播委托,调用多播委托,可以按照顺序连续调用多个方法,因此,委托的签名就必须返回void;否则,就只能得到委托调用的最好一个方法的结果 1.多播委托可以用运算符"+&q ...

  6. 前端为什么要学习 Selenium

    如果你正在阅读本文,那么可能希望从手动测试升级为自动化测试.你是对的,因为你需要学习 Selenium.我这样说是因为自动化测试已经风靡全球,而且业界正很缺少 Selenium 认证专家. 你可能还想 ...

  7. 内存缓存的使用Demo

    使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLC ...

  8. Apache 配置外网站点

    基于域名,一般是对外网站 www.etiantian.org/var/www/html/www blog.etiantian.org /var/www/html/blog bbs.tiantian.o ...

  9. Qt项目界面文件(.ui)及其作用(超详细)

    http://c.biancheng.net/view/1820.html Qt 项目中,后缀为“.ui”的文件是可视化设计的窗体的定义文件,如 widget.ui.双击项目文件目录树中的文件 wid ...

  10. 10年前文章_eclipse下perl环境搭建

    eclipse下perl环境搭建1.Eclipse下安装perl插件Help -Software Updates…- Available .- Add Site… :http://e-p-i-c ...