1. 程式人生 > 程式設計 >c# 防火牆新增/刪除 特定埠的示例

c# 防火牆新增/刪除 特定埠的示例

  針對將特定埠加入到windows系統的防火牆中,使其允許或禁止通過防火牆。其大概思路是:

c# 防火牆新增/刪除 特定埠的示例

/// <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# 防火牆新增/刪除埠的資料請關注我們其它相關文章!