簡單介紹c#透過程式碼開啟或關閉防火牆示例

安全劍客發表於2020-11-08
這篇文章主要介紹了c# 透過程式碼開啟或關閉防火牆的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以瞭解下

透過程式碼操作防火牆的方式有兩種:一是程式碼操作修改登錄檔啟用或關閉防火牆;二是直接操作防火牆物件來啟用或關閉防火牆。不論哪一種方式,都需要使用管理員許可權,所以操作前需要判斷程式是否具有管理員許可權。

1、判斷程式是否擁有管理員許可權

需要引用名稱空間:System.Security.Principal

/// 判斷程式是否擁有管理員許可權
///true:是管理員;false:不是管理員public static bool IsAdministrator()
{
  WindowsIdentity current = WindowsIdentity.GetCurrent();
  WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current);
  return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}
2、登錄檔修改防火牆

需要引用名稱空間:Microsoft.Win32

/// 透過登錄檔操作防火牆
/// 域網路防火牆(禁用:0;啟用(預設):1)
/// 公共網路防火牆(禁用:0;啟用(預設):1)
/// 專用網路防火牆(禁用:0;啟用(預設):1)
public static bool FirewallOperateByRegistryKey(int domainState=1, int publicState = 1, int standardState = 1)
{
  RegistryKey key = Registry.LocalMachine;
  try
  {
    string path = "HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\SharedAccess\\Defaults\\FirewallPolicy";
    RegistryKey firewall = key.OpenSubKey(path, true);
    RegistryKey domainProfile = firewall.OpenSubKey("DomainProfile", true);
    RegistryKey publicProfile = firewall.OpenSubKey("PublicProfile", true);
    RegistryKey standardProfile = firewall.OpenSubKey("StandardProfile", true);
    domainProfile.SetValue("EnableFirewall", domainState, RegistryValueKind.DWord);
    publicProfile.SetValue("EnableFirewall", publicState, RegistryValueKind.DWord);
    standardProfile.SetValue("EnableFirewall", standardState, RegistryValueKind.DWord);
  }
  catch (Exception e)
  {
    string error = $"登錄檔修改出錯:{e.Message}";
    throw new Exception(error);
  }
  return true;
}
3、直接操作防火牆物件

需要在專案引用中新增對NetFwTypeLib的引用,並引用名稱空間NetFwTypeLib

/// 透過物件防火牆操作
/// 域網路防火牆(禁用:false;啟用(預設):true)
/// 公共網路防火牆(禁用:false;啟用(預設):true)
/// 專用網路防火牆(禁用: false;啟用(預設):true)
public static bool FirewallOperateByObject(bool isOpenDomain = true, bool isOpenPublicState = true, bool isOpenStandard = true)
{
  try
  {
    INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
    // 啟用<高階安全Windows防火牆> - 專有配置檔案的防火牆
    firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, isOpenStandard);
    // 啟用<高階安全Windows防火牆> - 公用配置檔案的防火牆
    firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, isOpenPublicState);
    // 啟用<高階安全Windows防火牆> - 域配置檔案的防火牆
    firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, isOpenDomain);
  }
  catch (Exception e)
  {
    string error = $"防火牆修改出錯:{e.Message}";
    throw new Exception(error);
  }
  return true;
}

以上就是c# 透過程式碼開啟或關閉防火牆的詳細內容。

原文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2732841/,如需轉載,請註明出處,否則將追究法律責任。

相關文章