当前位置:网站首页>A brief introduction of C code to open or close the firewall example

A brief introduction of C code to open or close the firewall example

2020-11-08 23:48:00 That's how Linux should learn

This article mainly introduces c# Examples of turning firewalls on or off by code , To help people better understand and use c#, Interested friends can learn about

There are two ways to operate firewalls through code : First, code operation to modify the registry, enable or close the firewall ; The other is to directly operate the firewall object to enable or close the firewall . Either way , You need to use administrator rights , Therefore, it is necessary to determine whether the program has administrator rights before operation .

1、 Determine whether the program has administrator rights

You need to reference a namespace :System.Security.Principal

///  Determine whether the program has administrator rights 
/// true: It's the administrator ;false: Not an administrator 
public static bool IsAdministrator()
{
  WindowsIdentity current = WindowsIdentity.GetCurrent();
  WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current);
  return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}
2、 Registry modification firewall

You need to reference a namespace :Microsoft.Win32

///  Through the registry operation firewall 
///  Domain network firewall ( Ban :0; Enable ( Default ):1)
///  Public network firewall ( Ban :0; Enable ( Default ):1)
///  Private network firewall ( Ban :0; Enable ( Default ):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 = $" Error modifying registry :{e.Message}";
    throw new Exception(error);
  }
  return true;
}
3、 Direct manipulation of firewall objects

You need to add a reference to the project NetFwTypeLib References to , And reference the namespace NetFwTypeLib

///  Through the object firewall operation 
///  Domain network firewall ( Ban :false; Enable ( Default ):true)
///  Public network firewall ( Ban :false; Enable ( Default ):true)
///  Private network firewall ( Ban : false; Enable ( Default ):true)
public static bool FirewallOperateByObject(bool isOpenDomain = true, bool isOpenPublicState = true, bool isOpenStandard = true)
{
  try
  {
    INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
    //  Enable < Advanced security Windows A firewall > -  Proprietary profile firewall 
    firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, isOpenStandard);
    //  Enable < Advanced security Windows A firewall > -  Firewall for public profiles 
    firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, isOpenPublicState);
    //  Enable < Advanced security Windows A firewall > -  Domain profile firewall 
    firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, isOpenDomain);
  }
  catch (Exception e)
  {
    string error = $" Firewall modification error :{e.Message}";
    throw new Exception(error);
  }
  return true;
}

That's all c# Turn on or off the details of the firewall by code .

This paper addresses :https://www.linuxprobe.com/close-linux-open.html

版权声明
本文为[That's how Linux should learn]所创,转载请带上原文链接,感谢