c# 防火牆新增/刪除 特定埠的示例
阿新 • • 發佈:2020-10-29
針對將特定埠加入到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# 防火牆新增/刪除特定埠的示例的詳細內容,更多關於c# 防火牆新增/刪除埠的資料請關注我們其它相關文章!