C# 防火墻操作之特定端口
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
針對將特定端口加入到windows系統(tǒng)的防火墻中,使其允許或禁止通過防火墻。其大概思路是: ///
<summary> ///
添加防火墻例外端口 ///
</summary> ///
<param name="name">名稱</param> ///
<param name="port">端口</param> ///
<param name="protocol">協(xié)議(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) { //創(chuàng)建firewall管理類的實例: Type的GetTypeFromProgID是通過注冊表信息項目創(chuàng)建實例類型
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//判斷網(wǎng)絡類型,是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; } //查找以前是否有相同的規(guī)則創(chuàng)建,如果有則不再創(chuàng)建新的規(guī)則 foreach (INetFwOpenPort mPort in
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts) {
if (mPort.Protocol == protocolType &&
mPort.Port == port)
{
return; } } //創(chuàng)建一個防火墻端口管理實例
INetFwOpenPort objPort =
(INetFwOpenPort)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwOpenPort")); //設置端口實例名稱
objPort.Name = name; //設置端口信息
objPort.Port = port; //端口管理的網(wǎng)絡類型 objPort.Protocol
= protocolType; /*
* NET_FW_SCOPE_ALL 范圍是所有地址。
* NET_FW_SCOPE_CUSTOM 自定義范圍。
* NET_FW_SCOPE_LOCAL_SUBNET 范圍是本地子網(wǎng)。
* NET_FW_SCOPE_MAX 使用僅用于測試。不意味著為應用程序?qū)崿F(xiàn)。
*/ //端口的范圍,針對哪類或哪個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) {
//這而需要移除多個地址之間的空白字符串,有空白字符串會出現(xiàn)設置異常
objPort.RemoteAddresses = remoteAddresses.Replace(" ", ""); ;//"192.168.1.10,192.168.1.12......."; } //是否啟用規(guī)則
objPort.Enabled = true; //加入到本地防火墻管理規(guī)則中。
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(objPort);
} 刪除規(guī)則比較簡單:創(chuàng)建防火墻實例,直接移除某種通信類型的端口就行: /// <summary> /// 刪除防火墻例外端口 /// </summary> /// <param name="port">端口</param> /// <param name="protocol">協(xié)議(TCP、UDP)</param> public static void DeletePortsUseFirewall(int port, string protocol) { //創(chuàng)建firewall管理類的實例: Type的GetTypeFromProgID是通過注冊表信息項目創(chuàng)建實例類型 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); } }
該文章在 2021/3/24 22:59:16 編輯過 |
關鍵字查詢
相關文章
正在查詢... |