随笔 - 4  文章 - 0 评论 - 21 trackbacks - 1
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

昵称:谭谨
园龄:4年7个月
粉丝:0
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

最新评论

     在编程控制防火墙前先要有个前提,就是你必须是管理员权限, 这样本例的程序才能用"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也是一样的。核心程序如下:

FireWallManager.cs

程序代码如下:
http://files.cnblogs.com/phytan/FirewallManager.rar

最后,再给一个更简单的操作防火墙的方法,其实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
posted on 2007-07-11 18:32 谭谨 阅读(3393) 评论(6) 编辑 收藏

FeedBack:
#1楼 2007-07-12 09:18 路过[未注册用户]
非常有用,感谢!
 回复 引用   
#2楼 2008-06-23 17:38 咖啡猪      
INetFwPolicy2 这个是什么类型啊?怎么我在编译时提示“无法找到此类型”?
 回复 引用 查看   
#3楼 2008-06-23 18:51 phytan[未注册用户]
程序中添加引用,在COM对象中找到"NetFwTypeLib"
 回复 引用   
#4楼 2008-06-24 09:19 咖啡猪      
我添加了对NetFwTypeLib的引用,不过还是没那个INetFwPolicy2,只有INetFwPlicy,难道是操作系统的原因?
我的系统:Xp(Sp2) + Vs2005(sp1)

 回复 引用 查看   
莫谈国是!!!
 回复 引用   
#6楼 2010-10-11 21:23 寒枫帝      
很好。
 回复 引用 查看