用VB设计基于代理服务器的网络计费系统

VB设计基于代理服务器的网络计费系统

四川南充市西南石油学院信息通讯中心 郭 静

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

概述
随着政府上网和企业上网工程的全面展开,各个政府部门及企事业单位Internet应用越来越走向深入。各单位除了建网的一次性投资外,更多面临的是日常网络使用费的问题,这其中除专线月租费、端口费、IP地址费等固定费用外,长期、不确定的费用便是ISP收取的专线网络数据流量费。
专线用户在使用网络是经常面临这样一种情况,由于上级ISP通常不提供上流量统计查询手段,而是每月提供一张收费单,因此在收到上级ISP的流量收费清单之前,专线用户单位往往不清楚自己的网络使用及费用情况,无法控制每月的网络使用费用。然而,即使是包月收费,专线用户单位也对其内部各个部门或IP地址的网络使用情况做到心中有数。
如此看来,按照“谁使用,谁付费”的原则,建立自己的网络统计记费系统,随时掌握本单位各个部门及用户的网络使用情况,收取适当的网络使用费用,将有利于加强网络管理,保证网络的合理、有效利用。
网络记费系统通常包括数据采集、数据统计、记费信息查询、记费规则管理和用户管理等方面。根据流量数据采集方式的不同,专线网络记费系统大体可划分为四种类型:
1、基于路由器的网络记费系统
路由器本身具备流量统计功能,因此基于路由器的网络记费系统定时读取路由器MIB管理信息库中的IP计费表,并将这些采集到的数据处理后装入数据库中,在此数据库基础上进行统计记费等管理工作。
但为路由器增加流量统计任务必然会加重其工作负载,而且,与记费相关的数据变量如不及时读取就会溢出,造成数据丢失。因此数据采集周期要求很短。这样,越是网络流量大的路由器就越是频繁传递采集数据,如此会使网络带宽更为拥挤。
此外,由于这种记费方式是按IP地址统计流量,对于在公共网络机房上网的用户就无法统计其流量。另外,在采用DHCP进行IP地址动态分配时,无法分辨是哪台机器或哪个用户产生的流量。
2、基于防火墙的网络记费系统
有些防火墙产品带有流量统计功能,因此也可以利用放火墙的监控记录进行流量统计,进而实现记费管理。
3、基于以太网广播特性的网络记费系统
此方法利用了以太网的广播传输特性,使以太网适配器NIC工作在混合模式,以捕获局域网上每个以太网数据帧。通过分析每一帧,将表示帧长度的字段抽取出来,进而统计以太网上各个IP地址的网络流量(当然也可统计IPX协议或其他网络协议的流量),实现网络计费。
此方法要求以太网帧捕获采集工作站与网络出口路由器或边界路由器必须处在同一网段上,即必须将路由器LAN端口与数据捕获采集工作站连接在同一个共享式集线器上。由于此方法(通常也称为Sniff技术)只接收不发送,因此不占用网络代宽,不增加路由器的工作负荷,对网络和路由器工作无任何影响。
4、基于代理服务器的网络记费系统
大多数代理服务器软件产品具有登记内部网用户访问外部网的日志记录,有些产品还可以直接将日志记录到数据库中。日志记录包括用户标志、客户机IP地址、建立连接的时间、传送字节数、请求连接远程站点的URL等信息。根据日志记录文件或数据库,可以统计内部网每个用户的网络流量以及上网时间,甚至可以按服务网络类型(如:HTTP、SMTP、FTP等)分别进行统计。当然,基于代理服务器的数据流量统计方法同样也适用于局域网拨号上网的情况。
实现专线网络记费有多种方式,选择何种方式应该根据各单位的实际情况。总的说来,网络记费系统应该结合各单位的网络结构整体设计。
基于代理服务器的网络计费系统
下面详细叙述一下Windows NT 4.0平台上,基于微软MS Proxy Server代理服务器的网络计费系统的实现。
1、开发环境
操作系统:Windows NT 4.0(sp3或更高)
代理服务器:MS Proxy Server
开发工具:Visual Basic 6.0
2、总体设计
利用代理服务器进行数据采集,进而进行流量统计,计算用户的上网费用。系统应提供友好的管理和查询接口,如用户管理、费用管理、费用查询,密码修改等。
3、具体实现
(1)数据采集
这一步由代理服务器自动完成。为了让代理服务器将日志记录到数据库文件中,还应完成以下几步:
●安装Microsoft SQL Server
●如果系统中没有安装ODBC驱动程序,还要先安装ODBC驱动程序
●设置系统DSN为Local Server,驱动程序为SQL Server
●利用SQL日志记录表工具建表,具体方法为,访问安装代理服务器主机的http://myproxyserver/scripts/mkplog.exe页面,根据提示生成日志记录表。
(2)流量统计及费用计算
使用ADO连接,操纵日志记录数据库。将同一用户名的记录进行累加,并且根据预先设定的计费单价计算费用,结果保存到费用管理数据库中。ADO的使用方法如下:
Public Sub main()
Dim conn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
注释: 打开连接
conn.Open "DSN=LocalServer;uid=sa;pwd=;database=master"
注释: 创建命令
Set cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * from MspSrvLog"
注释: 执行命令
rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenStatic, adLockBatchOptimistic
注释: 操作数据
rs!ClientUserName.Properties("Optimize") = True
rs.Sort = "ClientUserName"
rs.MoveFirst
Do While Not rs.EOF
Debug.Print "Name: " & rs! ClientUserName & "IP " rs!ClientIP  
rs.MoveNext
Loop
注释: 更新数据
conn.BeginTrans
注释: 结束更新
On Error GoTo ConflictHandler
rs.UpdateBatch
On Error GoTo 0
conn.CommitTransExit Sub

ConflictHandler:
rs.Filter = adFilterConflictingRecords
rs.MoveFirst
Do While Not rs.EOF
Debug.Print "Conflict: Name: " & rs!ClientUserName; " " & rs!ClientUserName
rs.MoveNext
Loop
conn.Rollback
Resume Next
End Sub
(3)定时器
为了实现系统的实时性,必须定时的进行流量统计和费用计算,因此需要有一个定时程序。VB中提供的Timer定时器最大的时间间隔是65536毫秒,也就是1分钟多点,这是不能满足我们的要求的。本系统为了给用户提供更大的灵活性,可由用户自行设定流量统计的时间间隔。在开始计费时初始化变量Next_Time=当前时间+用户设定的时间间隔。定时器程序如下:
Private Sub Timer1_Timer()
Current_Time = Timer ‘获取系统当前时间
‘如果开始计费标志(Start)为真,且下次开始时间与当前系统时间差的绝对值 ‘小于等于60秒,则开始统计,同时修改变量Next_Time
If (start = True) And (Abs(Next_Time - Current_Time) <= 60) Then
‘Interval_Time为用户设定的时间间隔,单位:秒
Next_Time = Current_Time +60*Interval_Time  
Call process
Else
Exit Sub
End If
End Sub
(4)用户管理
本系统与Windows NT的域用户相结合,通过活动目录服务接口可以方便地完成用户的增加、删除、锁定、取消锁定等工作。同时,用户的增加删除等任务还应与费用管理相结合。当向NT域中增加一个用户时,也应在费用管理数据库中增加该用户;当从NT域中删除一个用户时,也应从费用管理数据库中删除该用户。下面是一段向NT域中增加用户的程序:
Private Sub User_Add()
Dim myComputer
Dim newUser
Dim sUsername
Dim sDescription
Dim sPassword

‘设置新用户的属性值
sUsername=”yuansh”
sDescription=”Teacher”
sPassword=”password”

Set myComputer=GetObject(“WinNT://mymachine”)

‘为新用户创建帐户
Set newUser=myComputer.Creat(“user”,sUsername)
newUser.SetInfo

newUser.Description=sDescription
newUser.Password=sPassword
newUser.SetInfo

End Sub
(5)费用管理和费用查询
费用管理和费用查询都可以通过Data控件和MSFlexGrid控件结合费用管理数据库来完成。具体做法为:
●在窗体上添加Data控件
●将Data 控件的DatabaseName属性设为费用管理数据库的名称,RecordSource属性设为数据表的名称
●将MSFlexGrid控件的DataSource属性设为Data控件的名称
这样,就可以用MSFlexGrid控件显示用户费用数据。下面是一段用户缴费管理的代码:
Private Sub jf_ok_Click()
Dim dbusr As Database
Dim rsusr As Recordset
Dim dbnameusr As String
Dim temname As String
Dim MyUser As IADsUser

temname = jf_usr.Text ‘从文本框获取用户名
dbnameusr = app.path & "usrinfo.mdb" ‘带有绝对路径的数据库名

Set dbusr = OpenDatabase(dbnameusr) ‘打开数据库
Set rsusr = dbusr.OpenRecordset("SELECT * FROM feiyong WHERE 用户名=注释:" & temname & "注释:")

rsusr.Edit
rsusr.Fields("缴费日期").Value = Date
rsusr.Fields("缴纳金额").Value = Val(jf_jine.Text)
rsusr.Fields("当前余额").Value = rsusr.Fields("缴纳金额").Value + rsusr.Fields("上次余额")
rsusr.Update

End Sub
(6)统计分析
统计分析主要是用Microsoft Chart Control 控件将某个时间段内全部用户访问次数最多的几个站点,上网时间最多的前几名用户等信息以图表的形式表示出来,便于对网络使用情况进行分析。
posted @ 2007-01-12 15:12  TangHuawei  阅读(652)  评论(0编辑  收藏  举报