用C#來控制高級安全Windows防火牆


有的時候我們需要在自己的產品中檢測<高級安全Windows防火牆>的狀態,並有可能需要加入一些規則甚至需要關閉掉高級安全Windows防火牆。

下面就告訴如何來做:

<高級安全Windows防火牆>的狀態界面如下:

已測試環境 Windows Server 2008 Enterprise X64 / Windows Server 2008 R2 Enterprise

PS: 我只關注於服務器環境,:)

image

image

第一步:添加對於Windows Firewall with Advanced Security APIs的COM引用INetFwPolicy2

image

第二步:引入需要的命名空間

using NetFwTypeLib;

第三步:上代碼,自己看了

//啟用或禁用<高級安全Windows防火牆>,適用於Windows Vista/7/2008 R2(x86/x64)

//來自 Blog.WebServerGuard.Net 
bool Net_FW_Domain_Status = false; 
bool Net_FW_Public_Status = false; 
bool Net_FW_Private_Status = false;

Type NetFwMgrTypeWithAdSecurity = Type.GetTypeFromProgID("HNetCfg.FwPolicy2", false); 
INetFwPolicy2  mgrWithAdSecurity = (INetFwPolicy2 )Activator.CreateInstance(NetFwMgrTypeWithAdSecurity);

//啟用或禁用<高級安全Windows防火牆> - 所有配置文件,適用於Windows Vista/7/2008 R2 
//mgr2.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_ALL, false);

//啟用或禁用<高級安全Windows防火牆> - 域配置文件,適用於Windows Vista/7/2008 R2 
mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, false);

//啟用或禁用<高級安全Windows防火牆> - 公用配置文件,適用於Windows Vista/7/2008 R2 
mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, true );

//啟用或禁用<高級安全Windows防火牆> - 專有配置文件,適用於Windows Vista/7/2008 R2 
mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, false);

//檢測<高級安全Windows防火牆>的狀態

//來自 Blog.WebServerGuard.Net 
Net_FW_Domain_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN); 
MessageBox.Show("Net_FW_Domain_Status:" + Net_FW_Domain_Status.ToString ());

Net_FW_Public_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC); 
MessageBox.Show("Net_FW_Public_Status:" + Net_FW_Public_Status.ToString());

Net_FW_Private_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE); 
MessageBox.Show("Net_FW_Private_Status:" + Net_FW_Private_Status.ToString());

域配置文件、專有配置文件、公用配置文件適用范圍請自行查閱資料。

更多功能可以參考:

《Using Windows Firewall with Advanced Security》 - http://msdn.microsoft.com/en-us/library/aa366418(VS.85).aspx

上面的資料給出了C/C++/VBScript的示例代碼,很容易對應到相應的C#代碼

 如何 添加 和 刪除 允許通過防火牆的程序進入例外列表

 

本篇,我們用到了COM引用,因為不使用COM引用的話,操作太過繁瑣了 

一、 添加 COM 引用

在引用里,選擇 COM 頁, 找到 NetFwTypeLib , 確定即可

二、 引入命名空間

using NetFwTypeLib;

三、 添加允許通過防火牆的例外程序

//創建firewall管理類的實例
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));

//創建一個認證程序類的實例
INetFwAuthorizedApplication app = (INetFwAuthorizedApplication)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication"));

//在例外列表里,程序顯示的名稱
app.Name = "自定義"; 

//程序的決定路徑,這里使用程序本身
app.ProcessImageFileName = Application.ExecutablePath;

//是否啟用該規則
app.Enabled = true;

//加入到防火牆的管理策略
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app);
四、刪除一個例外 列表 里的程序
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//參數為程序的絕對路徑
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(Application.ExecutablePath);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM