天天看點

在Vista中程式設計控制防火牆設定(C#)

     在程式設計控制防火牆前先要有個前提,就是你必須是管理者權限, 這樣本例的程式才能用"Run as administrator"的方式運作,并成功修改. 如果你本身就是用Administrator這個使用者登入的話,直接運作就行了. 建議最好在這個使用者下來調試程式.

     本程式隻是個初始的例子,裡面的功能隻開發了一部分,各位有興趣的話可以繼續深入運用. 像Vista的防火牆就比較Bt,除了基本設定外,在"Control Panel\Administrative Tools\Windows Firewall with Advanced Security" 還有進階設定,好像用程式都可控制.

    FireWallManager 程式主要功能有

      1. public void FireWallTrigger( bool enable )  //開關防火牆. 貌似在Vista裡面有問題,XP sp2好像可以. 但是用INetFwPolicy2.set_FirewallEnabled的方法的話,Vista也能搞定.

      2.  public void FireWallService( string name, bool enable )  //開關防火牆服務程式,一般裡面的 File and Printer Sharing 服務比較有用.

      3.  public bool AddPort( string portName, int portNumber, string protocol )   // 開啟一個端口.

      4.  public bool RemovePort( int portNumber, string protocol )          //删除開啟的端口

      5.  public bool AddAplication( string discriptionName, string fileName )   //開啟放行應用程式

      6.  public bool RemoveApplication( string fileName )         // 關閉放行的應用程式.

裡面還有個 protected Object getInstance( String typeName ) 本來是用CLSID來執行個體化那些接口的,後來發現ProgID其實更簡單,不需要查,裡面有個規律,隻需把接口的INet删掉就是ProgID了. 如 INetFwOpenPort port = ( INetFwOpenPort )Activator.CreateInstance( Type.GetTypeFromProgID( "HNetCfg.FwOpenPort" ) ); 中 INetFwOpenPort 與 FwOpenPort.

     首先,建立一個Console程式,在程式中添加引用,在COM對象中找到"NetFwTypeLib" ,添加即可. 防火牆主要是靠這個對象操作的. 貌似不止Vista, Xp也是一樣的。核心程式如下:

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

FireWallManager.cs

在Vista中程式設計控制防火牆設定(C#)

using System;

在Vista中程式設計控制防火牆設定(C#)

using System.Collections.Generic;

在Vista中程式設計控制防火牆設定(C#)

using System.Text;

在Vista中程式設計控制防火牆設定(C#)

using NetFwTypeLib;

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

namespace FirewallManager

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

    class FwManager

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

        private INetFwMgr NetFwMgr;

在Vista中程式設計控制防火牆設定(C#)

        private INetFwProfile NetFwProfile;

在Vista中程式設計控制防火牆設定(C#)

        private INetFwPolicy2 NetFwPolicy2;  //this interface contains lots of usefull functions.

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public FwManager()

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            //Create Com Object

在Vista中程式設計控制防火牆設定(C#)

            //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;

在Vista中程式設計控制防火牆設定(C#)

            NetFwProfile = NetFwMgr.LocalPolicy.CurrentProfile;

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

            Type NetFwPolicy2Type = Type.GetTypeFromProgID( "HNetCfg.FwPolicy2" );

在Vista中程式設計控制防火牆設定(C#)

            object NetFwPolicy2Object = System.Activator.CreateInstance( NetFwPolicy2Type );

在Vista中程式設計控制防火牆設定(C#)

            NetFwPolicy2 = ( INetFwPolicy2 )NetFwPolicy2Object;

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public void ShowInfo()

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            switch( NetFwProfile.Type )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_DOMAIN:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Network Profile Type1: " + "Domain" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_STANDARD:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Network Profile Type1: " + "Standard" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_CURRENT:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Network Profile Type1: " + "Current" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_TYPE_MAX:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Network Profile Type1: " + "Max" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            switch( ( NET_FW_PROFILE_TYPE2_ )NetFwPolicy2.CurrentProfileTypes )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Network Profile Type2: " + "Domain" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Network Profile Type2: " + "Private" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Network Profile Type2: " + "Public" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_ALL:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Network Profile Type2: " + "All" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "Firewall Enabled: " + NetFwProfile.FirewallEnabled );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "Exceptions Not Allowed: " + NetFwProfile.ExceptionsNotAllowed );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "Notifications Disabled: " + NetFwProfile.NotificationsDisabled );

在Vista中程式設計控制防火牆設定(C#)

            //Console.WriteLine("UnicastResponsestoMulticastBroadcastDisabled: " + NetFwProfile.UnicastResponsestoMulticastBroadcastDisabled);

在Vista中程式設計控制防火牆設定(C#)

            //Remote Admin

在Vista中程式設計控制防火牆設定(C#)

            INetFwRemoteAdminSettings RASettings = NetFwProfile.RemoteAdminSettings;

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "Remote Administration Enabled: " + RASettings.Enabled );

在Vista中程式設計控制防火牆設定(C#)

            switch( RASettings.IpVersion )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_IP_VERSION_.NET_FW_IP_VERSION_V4:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Remote Administration IP Version: V4" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_IP_VERSION_.NET_FW_IP_VERSION_V6:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Remote Administration IP Version: V6" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_IP_VERSION_.NET_FW_IP_VERSION_MAX:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Remote Administration IP Version: MAX" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Remote Administration IP Version: ANY" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            switch( RASettings.Scope )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_SCOPE_.NET_FW_SCOPE_ALL:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Remote Administration Scope: ALL" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_SCOPE_.NET_FW_SCOPE_CUSTOM:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Remote Administration Scope: Custom" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_SCOPE_.NET_FW_SCOPE_LOCAL_SUBNET:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Remote Administration Scope: Local Subnet" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

                case NET_FW_SCOPE_.NET_FW_SCOPE_MAX:

在Vista中程式設計控制防火牆設定(C#)

                    Console.WriteLine( "Remote Administration Scope: MAX" );

在Vista中程式設計控制防火牆設定(C#)

                    break;

在Vista中程式設計控制防火牆設定(C#)

            }

            // ICMP

在Vista中程式設計控制防火牆設定(C#)

            INetFwIcmpSettings icmpSettings = NetFwProfile.IcmpSettings;

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "ICMP Settings:" );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowOutboundDestinationUnreachable: " + icmpSettings.AllowOutboundDestinationUnreachable );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowOutboundSourceQuench:           " + icmpSettings.AllowOutboundSourceQuench );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowRedirect:                       " + icmpSettings.AllowRedirect );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowInboundEchoRequest:             " + icmpSettings.AllowInboundEchoRequest );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowInboundRouterRequest:           " + icmpSettings.AllowInboundRouterRequest );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowOutboundTimeExceeded:           " + icmpSettings.AllowOutboundTimeExceeded );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowOutboundParameterProblem:       " + icmpSettings.AllowOutboundParameterProblem );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowInboundTimestampRequest:        " + icmpSettings.AllowInboundTimestampRequest );

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "  AllowInboundMaskRequest:             " + icmpSettings.AllowInboundMaskRequest );

在Vista中程式設計控制防火牆設定(C#)

            // Gloabal Open ports

在Vista中程式設計控制防火牆設定(C#)

            foreach( INetFwOpenPort port in NetFwProfile.GloballyOpenPorts )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( "Open port: " + port.Name + ":" + port.Port + ", " + port.Protocol + " " + port.Enabled );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            // Services

在Vista中程式設計控制防火牆設定(C#)

            foreach( INetFwService serv in NetFwProfile.Services )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( "Service: " + serv.Name + ": " + serv.Enabled );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            // Autorised Applications

在Vista中程式設計控制防火牆設定(C#)

            foreach( INetFwAuthorizedApplication app in NetFwProfile.AuthorizedApplications )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( "AuthorizedApplication: " + app.Name + ": " + app.Enabled );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine();

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public void FireWallTrigger( bool enable )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            try

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                NetFwProfile.FirewallEnabled = enable;

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            catch( Exception e )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( e.Message );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            //try

在Vista中程式設計控制防火牆設定(C#)

            //{

在Vista中程式設計控制防火牆設定(C#)

            //    NetFwPolicy2.set_FirewallEnabled( NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, enable );

在Vista中程式設計控制防火牆設定(C#)

            //}

在Vista中程式設計控制防火牆設定(C#)

            //catch( Exception e )

在Vista中程式設計控制防火牆設定(C#)

            //{

在Vista中程式設計控制防火牆設定(C#)

            //    Console.WriteLine( e.Message );

在Vista中程式設計控制防火牆設定(C#)

            //}

在Vista中程式設計控制防火牆設定(C#)

            Console.WriteLine( "FireWall Enabled: " + NetFwProfile.FirewallEnabled );

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public bool FireWallState()

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            return NetFwProfile.FirewallEnabled;

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public void FireWallService( string name, bool enable )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            try

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                foreach( INetFwService serv in NetFwProfile.Services )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                    if( serv.Name.ToUpper() == name.ToUpper() )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                        serv.Enabled = enable;

在Vista中程式設計控制防火牆設定(C#)

                        Console.WriteLine( "Service: " + serv.Name + ": " + serv.Enabled );

在Vista中程式設計控制防火牆設定(C#)

                        return;

在Vista中程式設計控制防火牆設定(C#)

                    }

在Vista中程式設計控制防火牆設定(C#)

                }

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( "The service '{0}' does not exist!", name );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            catch( Exception e )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( e.Message );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        private NET_FW_IP_PROTOCOL_ GetProtocol( string protocol )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            NET_FW_IP_PROTOCOL_ prot;

在Vista中程式設計控制防火牆設定(C#)

            if( protocol.ToUpper() == "TCP" )

在Vista中程式設計控制防火牆設定(C#)

                prot = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;

在Vista中程式設計控制防火牆設定(C#)

            else if( protocol.ToUpper() == "UDP" )

在Vista中程式設計控制防火牆設定(C#)

                prot = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP;

在Vista中程式設計控制防火牆設定(C#)

            else

在Vista中程式設計控制防火牆設定(C#)

                prot = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_ANY;

在Vista中程式設計控制防火牆設定(C#)

            return prot;

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public bool AddPort( string portName, int portNumber, string protocol )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            try

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                INetFwOpenPort port = ( INetFwOpenPort )Activator.CreateInstance( 

在Vista中程式設計控制防火牆設定(C#)

                    Type.GetTypeFromProgID( "HNetCfg.FwOpenPort" ) 

在Vista中程式設計控制防火牆設定(C#)

                    );

在Vista中程式設計控制防火牆設定(C#)

                port.Name = portName;

在Vista中程式設計控制防火牆設定(C#)

                port.Port = portNumber;

在Vista中程式設計控制防火牆設定(C#)

                port.Protocol = GetProtocol( protocol );

在Vista中程式設計控制防火牆設定(C#)

                port.Enabled = true;               

在Vista中程式設計控制防火牆設定(C#)

                NetFwProfile.GloballyOpenPorts.Add( port );

在Vista中程式設計控制防火牆設定(C#)

                return true;

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            catch( Exception e )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( e.Message );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            return false;

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public bool RemovePort( int portNumber, string protocol )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            try

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                NetFwProfile.GloballyOpenPorts.Remove( portNumber, GetProtocol( protocol ) );

在Vista中程式設計控制防火牆設定(C#)

                return true;

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            catch( Exception e )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( e.Message );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            return false;

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public bool AddAplication( string discriptionName, string fileName )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            try

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                INetFwAuthorizedApplication app = ( INetFwAuthorizedApplication )Activator.CreateInstance( 

在Vista中程式設計控制防火牆設定(C#)

                    Type.GetTypeFromProgID( "HNetCfg.FwAuthorizedApplication" ) 

在Vista中程式設計控制防火牆設定(C#)

                    );

在Vista中程式設計控制防火牆設定(C#)

                app.Name = discriptionName;

在Vista中程式設計控制防火牆設定(C#)

                app.ProcessImageFileName = fileName;

在Vista中程式設計控制防火牆設定(C#)

                app.Enabled = true;

在Vista中程式設計控制防火牆設定(C#)

                NetFwProfile.AuthorizedApplications.Add( app );

在Vista中程式設計控制防火牆設定(C#)

                return true;

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            catch( Exception e )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( e.Message );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            return false;

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        public bool RemoveApplication( string fileName )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            try

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                NetFwProfile.AuthorizedApplications.Remove( fileName );

在Vista中程式設計控制防火牆設定(C#)

                return true;

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            catch( Exception e )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Console.WriteLine( e.Message );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            return false;

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

        protected Object getInstance( String typeName )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

            if( typeName == "INetFwMgr" )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Type type = Type.GetTypeFromCLSID( new Guid( "{304CE942-6E39-40D8-943A-B913C40C9CD4}" ) );

在Vista中程式設計控制防火牆設定(C#)

                return Activator.CreateInstance( type );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            else if( typeName == "INetAuthApp" )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Type type = Type.GetTypeFromCLSID( new Guid( "{EC9846B3-2762-4A6B-A214-6ACB603462D2}" ) );

在Vista中程式設計控制防火牆設定(C#)

                return Activator.CreateInstance( type );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            else if( typeName == "INetOpenPort" )

在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)
在Vista中程式設計控制防火牆設定(C#)

{

在Vista中程式設計控制防火牆設定(C#)

                Type type = Type.GetTypeFromCLSID( new Guid( "{0CA545C6-37AD-4A6C-BF92-9F7610067EF5}" ) );

在Vista中程式設計控制防火牆設定(C#)

                return Activator.CreateInstance( type );

在Vista中程式設計控制防火牆設定(C#)

            }

在Vista中程式設計控制防火牆設定(C#)

            else

在Vista中程式設計控制防火牆設定(C#)

                return null;

在Vista中程式設計控制防火牆設定(C#)

        }

在Vista中程式設計控制防火牆設定(C#)

    }

在Vista中程式設計控制防火牆設定(C#)

}

最後,再給一個更簡單的操作防火牆的方法,其實Vista中用netsh這個指令行程式就可以操作防火牆了。

netsh firewall set service all enable  就可以開啟所有服務,很簡單。

netsh firewall add portopening TCP 12345 "Testaddport"  可以開啟一個12345的TCP端口。

還有 netsh advfirewall 等,可以操作更多選項。

參考:

http://danielw.blog.de/2007/01/06/windows_firewall_configuration~1521163

http://www.codeproject.com/useritems/enable_disable_firewall.asp

http://www.codeproject.com/vb/net/WinNetConn.asp

http://www.codeproject.com/useritems/FirewallSetupAction.asp

http://www.codeproject.com/w2k/WinXPSP2Firewall.asp

http://msdn2.microsoft.com/en-us/library/aa365309.aspx

http://www.cnblogs.com/appleseeker/archive/2007/07/10/812907.html