在编程控制防火墙前先要有个前提,就是你必须是管理员权限, 这样本例De程序才能用"Run as administrator"De方式运行,并成功修改. 如果你本身就是用Administrator这个用户登录De话,直接运行就行了. 建议最好在这个用户下来调试程序.
在编程控制防火墙前先要有个前提,就是你必须是管理员权限, 这样本例De程序才能用"Run as administrator"De方式运行,并成功修改. 如果你本身就是用Administrator这个用户登录De话,直接运行就行了. 建议最好在这个用户下来调试程序.
本程序只是个初始De例子,里面De功能只开发了一部分,各位有兴趣De话可以继续深入运用. 像VistaDe防火墙就比较Bt,除了基本设定外,在"Control Panel\Administrative Tools\Windows Firewall with Advanced Security" 还有高级设定,好像用程序都可控制.
FireWallManager 程序主要功能有
1. public void FireWallTrigger( bool enable ) //开关防火墙. 貌似在Vista里面有问题,XP sp2好像可以. 但是用INetFwPolicy2.set_FirewallEnabledDe方法De话,Vista也能搞定.
2. public void FireWallService( string name, bool enable ) //开关防火墙服务程序,一般里面De File and Printer Sharing 服务比较有用.
3. public bool AddPort( string portName, int portNumber, string protocol ) // 开启一个端口.
4. public bool RemovePort( int portNumber, string protocol ) //删除开启De端口
5. public bool AddAplication( string discriptionName, string fileName ) //开启放行应用程序
6. public bool RemoveApplication( string fileName ) // 关闭放行De应用程序.
里面还有个 protected Object getInstance( String typeName ) 本来是用CLSID来实例化那些接口De,后来发现ProgID其实更简单,不需要查,里面有个规律,只需把接口DeINet删掉就是ProgID了. 如 INetFwOpenPort port = ( INetFwOpenPort )Activator.CreateInstance( Type.GetTypeFromProgID( "HNetCfg.FwOpenPort" ) ); 中 INetFwOpenPort 与 FwOpenPort.
首先,创建一个Console程序,在程序中添加引用,在COM对象中找到"NetFwTypeLib" ,添加即可. 防火墙主要是靠这个对象操作De. 貌似不止Vista, Xp也是一样De.核心程序如下:
FireWallManager.cs
using System;
using System.Collections.Generic;
using System.Text;
using NetFwTypeLib;
namespace FirewallManager
{
class FwManager
{
private INetFwMgr NetFwMgr;
private INetFwProfile NetFwProfile;
private INetFwPolicy2 NetFwPolicy2; //this interface contains lots of usefull functions.
public FwManager()
{
//Create Com Object
//Type NetFwMgrType = Type.GetTypeFromCLSID( new Guid( "{304CE942-6E39-40D8-943A-B913C40C9CD4}" ) );
Type NetFwMgrType = Type.GetTypeFromProgID( "HNetCfg.FwMgr" );
object NetFwMgrObject = Activator.CreateInstance( NetFwMgrType );
NetFwMgr = ( INetFwMgr )NetFwMgrObject;
NetFwProfile = NetFwMgr.LocalPolicy.CurrentProfile;
Type NetFwPolicy2Type = Type.GetTypeFromProgID( "HNetCfg.FwPolicy2" );
object NetFwPolicy2Object = System.Activator.CreateInstance( NetFwPolicy2Type );
NetFwPolicy2 = ( INetFwPolicy2 )NetFwPolicy2Object;
}
public void ShowInfo()
{
switch( NetFwProfile.Type )
{
case NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_DOMAIN:
Console.WriteLine( "Network Profile Type1: " "Domain" );
break;
case NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_STANDARD:
Console.WriteLine( "Network Profile Type1: " "Standard" );
break;
case NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_CURRENT:
Console.WriteLine( "Network Profile Type1: " "Current" );
break;
case NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_TYPE_MAX:
Console.WriteLine( "Network Profile Type1: " "Max" );
break;
}
switch( ( NET_FW_PROFILE_TYPE2_ )NetFwPolicy2.CurrentProfileTypes )
{
case NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN:
Console.WriteLine( "Network Profile Type2: " "Domain" );
break;
case NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE:
Console.WriteLine( "Network Profile Type2: " "Private" );
break;
case NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC:
Console.WriteLine( "Network Profile Type2: " "Public" );
break;
case NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_ALL:
Console.WriteLine( "Network Profile Type2: " "All" );
break;
}
Console.WriteLine( "Firewall Enabled: " NetFwProfile.FirewallEnabled );
Console.WriteLine( "Exceptions Not Allowed: " NetFwProfile.ExceptionsNotAllowed );
Console.WriteLine( "Notifications Disabled: " NetFwProfile.NotificationsDisabled );
//Console.WriteLine("UnicastResponsestoMulticastBroadcastDisabled: " NetFwProfile.UnicastResponsestoMulticastBroadcastDisabled);
//Remote Admin
INetFwRemoteAdminSettings RASettings = NetFwProfile.RemoteAdminSettings;
Console.WriteLine( "Remote Administration Enabled: " RASettings.Enabled );
