【VB开源代码栏目提醒】:以下是网学会员为您推荐的VB开源代码-让VB程序穿越Windows防火墙 - 开发文档,希望本篇文章对您学习有所帮助。
让
VB程序穿越Windows防火墙 我们知道Windows XP SP2大大增强了内置防火墙的功能只要Windows防火墙检测到应用程序与外部
网络之间的传入通讯就会自动进行拦截。
而绕过这种检测机制的最佳办法就是使应用程序具有自动添加到Windows防火墙的例外列表功能就像eMule、Bitcomet这类工具一样。
一、编程原理 要使应用程序具有自动添加Windows防火墙例外列表的功能必须用到以下Windows Firewall API接口包括INetFwMgr、INetFwPolicy、INetFwAuthorizedApplication。
INetFwMgr接口主要用来获取当前
计算机上的防火墙配置对象所有与防火墙配置相关的操作都需要用到该接口 INetFwPolicy接口用来获取Windows防火墙的配置信息并提供了AuthorizedApplications属性与INetFwAuthorizedApplication接口关联 INetFwAuthorizedApplication接口则用来访问Windows例外列表中通过认证的应用程序的属性 通过上述三个接口不仅可以将我们自己的程序增加到Windows防火墙的例外列表而且还可以获取修改Windows防火墙的配置信息。
二、
代码实现 在了解实现原理之后接下来就可以编写具体的
代码了。
由于微软在发布上述接口的同时还提供了一个封装上述API的COM对象因此大大简化了程序
代码的编写。
1添加COM对象的引用 在
VB下单击菜单“工程”、“引用”然后在弹出窗口的
列表中选中“NetCon 1.0 Library”和“NetFwTypeLib”单击确定。
2本应用程序的界面
设计比较简单 在
VB窗体上放置了三个命令按钮和一个Label三个命令按钮分别用来实现启用防火墙、禁用防火墙、添加到防火墙例外列表Label控件用来显示防火墙的当前状态。
运行后的效果如图所示。
3添加
代码模块 在
VB下新建一个模块并添加如下
代码 Option Explicit On Const NET_FW_SCOPE_ALL 0 Const NET_FW_SCOPE_LOCAL_SU BNET 1 Const
NET_FW_IP_VERSION_ANY 2 获取Windows防火墙的当前状态 Public Function FirewallStatus As Boolean Dim fwMgr As INetFwMgr Dim oProfile As INetFwProfile On Error GoTo errHandler 声明Windows防火墙配置管理接口对象 fwMgr CreateObjectHNetCfg.FwMg r 获取本地防火墙当前的配置对象 oProfile fwMgr.LocalPolicy.CurrentPr ofile 获取防火墙的状态Ture表示启用False表示禁用 FirewallStatus oProfile.FirewallEnab led oProfile Nothing fwMgr Nothing Exit Function errHandler: FirewallStatus False MsgBoxError: Err.Description Err.Clear End Function 切换Windows防火墙的状态 Public Sub SwitchFirewall Dim fwMgr As INetFwMgr Dim oProfile As INetFwProfile On Error GoTo errHandler 声明Windows防火墙配置管理接口对象 fwMgr CreateObjectHNetCfg.FwMg r 获取本地防火墙当前的配置对象 oProfile fwMgr.LocalPolicy.CurrentPr ofile 根据当前的防火墙状态相应地调整启用与禁用状态 oProfile.FirewallEnabled Not oProfil e.FirewallEnabled oProfile Nothing fwMgr Nothing Exit Sub errHandler: MsgBoxErr.Description Err.Clear End Sub 将当前应用程序添加到Windows防火墙例外列表 Public Sub AddApplicationRule Dim fwMgr As INetFwMgr Dim oProfile As INetFwProfile On Error GoTo errHandler 声明Windows防火墙配置管理接口对象 fwMgr CreateObjectHNetCfg.FwMg r 获取本地防火墙当前的配置对象 oProfile fwMgr.LocalPolicy.CurrentPr ofile Dim oApplication As INetFwAuthorize dApplication 声明认证
程序对象 oApplication CreateObjectHNetCfg.FwAuthorizedApplication 设置认证程序对象的相关属性 With oApplication 应用程序的完整路径 .ProcessImageFileName App.Path WindowsFirewallControl.exe 应用程序的名称也就是在Windows防火墙例外列表中显示的名称 .Name Windows Firewall Control Programe 定义本规则作用的范围 .Scope NET_FW_SCOPE_ALL 定义本规则用户的IP协议版本 .IpVersion NET_FW_IP_VERSION_ ANY 表示启用当前规则 .Enabled True End With 将创建的认证程序对象添加到本地防火墙策略的认证程序集合 oProfile.AuthorizedApplications.AddoApplication MsgBox添加成功 Exit Sub errHandler: MsgBoxErr.Description Err.Clear End Sub 三、补充说明 ●由于Windows Firewall API接口是随Windows防火墙发布而新增的所以上述
代码只适用于安装了Winodws XP SP2和Windows 2003 Server SP1的操作
系统 ●尽管本文的示例程序是通过命令按钮将应用程序添加到Windows防火墙例外列表但最佳的处理方式是在应用程序启动时自动执行添加操作或者可以像eMule、Bitcomet那样提供一个选项让用户自行选择是否在启动时执行操作 ●除了文中提到的三个接口外Windows Firewall API还提供了其他用户防火墙控制的接口大家有兴趣可以通过
VB的对象查看器查阅MSDN
文档获取进一步的信息。
注上述应用程序在Windows XP SP2和
VB 6.0 SP6下调试通过。