VB编程-利用WINDOWS自带服务实现小型防火墙功能

  • 内容
  • 评论
  • 相关

首先说明一下我这里所谓的小型防火墙功能,就是屏蔽与指定IP的通讯、屏蔽本机特定端口等,这个在公司局域网里尤为好用,譬如有的公司在每台电脑上都装了监控软件(其实就是本人的公司),监控软件会向服务器发送你的活动(屏幕、QQ和飞信等主流IM软件的聊天记录、上网网址,甚至你插过几次U盘都能知道),只要屏蔽了和这个服务器的网络活动,自然就一了百了了。又或者网管想禁止一台电脑上网,如果路由不支持,那只要在这台电脑上面禁用访问外面的80端口,同样能达到目的。

本篇文章只讲思路,并罗列网上相关文章,具有相关技术水平的人应该能看懂的。

好了,废话不再多说,下面首先请出本篇文章的主角——IPSec。

关于IPSec的介绍,这里有2篇文章:
如何使用 IPSec 阻止特定网络协议和端口  http://support.microsoft.com/kb/813878/zh-cn (微软的)
IPSec 疑难解答工具  http://msdn.microsoft.com/zh-cn/subscriptions/cc784300(v=ws.10).aspx(微软的MSDN)

当然,你可以略过上面2篇文章,因为这个安全策略要么你直接去操作管理工具,要么改注册表,貌似都比较麻烦,所以微软弄了个IPSECCMD的命令行工具出来,参考以下两篇文章的说明:
ipseccmd详解 ipseccmd封IP ipseccmd封端口 http://hi.baidu.com/akxqmumrxwdgjze/item/9c83f80bbe9bb43af2eafc4a (这个挺好,图文并茂的)
通信百科关于ipseccmd的介绍 http://baike.c114.net/view.asp?ipseccmd 
说一下本人的经验哦,如果只是临时生效的,-w -p -r -x参数都可以不加入,只要有-f与-n就够了。服务重启就会失效了。

但这个IPseccmd的工具在一般电脑里面都没,XP的安装包大家手头上可能也没,没关系,microsoft提供了下载地址,不过是一个大的工具包,下载下来后可以不用运行安装,直接用解压工具解压,找到ipseccmd拉出来放到自己程序的根目录下用就可以了,microsoft提供的下载地址:
http://www.microsoft.com/zh-cn/download/details.aspx?id=18546

好了,有工具,就一步一步开始来,首先VB你要判断这个服务是否在运行吧,服务都没运行你肯定ipseccmd玩不来的,所以参考这个网址的内容:
VB调用API来创建、启动、删除系统服务 http://blog.sina.com.cn/s/blog_5542b9c90100s231.html
可以判断服务的状态,可以启动、暂停、停止服务。

但新问题又来了,IPsec你真正的服务名字叫什么啊,上面启动服务的函数Public Function StartNTService() As Long你要加什么参数就一头雾水了,试试IPsec,不行,马上再找,终于得到答案,原来它的服务名叫“PolicyAgent”,参考下面2篇文章:
WINXP服务列表与说明(360DOC图书馆的,很恶心,不让复制,不推荐) http://www.360doc.com/content/12/0607/05/1385643_216525400.shtml
Windows XP中常见服务详细说明(这个在南方医科大学的网络中心找到的,比较好) http://portal.smu.edu.cn/wlzx/wangluojishu/2010-08-04/1181.html

然后,你要外部运行ipseccmd,又要掩人耳目,就得用shell来进行,参考下面文章:
SHELL之隐藏窗口启动外部程序  http://www.mysuc.com/article/VB-SHELL-zhiyincangchuangkouqidongwaibuchengxu.htm

然后,如果你觉得ipseccmd与运行程序放在同一目录下,容易被人发现你用了什么手段,想隐瞒一下的话,可以利用释放资源的方法,先把ipseccmd放到程序里面,然后运行时释放至windows目录里,这样起码难发现了,但现在360很恶心,这种行为无论你释放的是什么,都会报木马,这个我还没找到办法,反正我让别人运行时通过就行,不相信我的程序就别运行了。下面是参考文章:
VB6中创建资源的方法(这个很好) http://wf66.com/page/20069/198866C05C.htm
创建后就是释放:VB 调用资源文件例子(文件打包与释放) http://www.yulv.net/archives/84/ 
用VB释放文件,最精简的代码 http://blog.csdn.net/cnzceo/article/details/5994637
如何知道windows目录?当然需要用到环境变量,参考百度知道用Environ()函数调用:http://zhidao.baidu.com/question/15496759.html

好了,运行好了,IP禁了,你总要测试一下吧,自己平常可以用ping测试,那程序呢?还好VB也有别人做的PING模块,参考:
CSDN的论坛帖子:[分享]纯VB实现ping(能否ping通)的功能,调用方便 http://topic.csdn.net/u/20090603/15/a1967885-e1da-44cc-8c1f-705d507ab22a.html
返回TRUE就是通,FALSE就是不通,很简单。

程序要退出了,是否需要删除释放出来的ipseccmd呢?这个看自己需求吧,反正VB也是有函数的,很简单,就是kill函数,参考:http://topic.csdn.net/t/20000602/09/10511.html

---------------------------------------------------------------------------------------

后面增加了一点编程思路,做了个程序,不想人人都能运行吧,所以我考虑需要用IP做判断,而且把自身IP发送到某个地址做识别,如果该IP地址为可用地址,则程序继续运行,否则退出。所以需要获取本机IP地址,与发送数据到Internet,查了一下,发现WINSOCK好用:
利用Winsock1.LocalIP可以获得本机IP,然后利用WINSOCK再发送IP到特定地址,获取是否可以继续运行的权限。
关于WINSOCK获取网页内容的可以参考这个CSDN论坛的一个求助帖子:http://topic.csdn.net/u/20100119/17/ab86c713-ab68-410b-8d57-21f2b48d208a.html

 

好啦,这次编程的全部知识都使用完毕了。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据