?? 213.htm
字號:
<p>用VB設計基于代理服務器的網(wǎng)絡計費系統(tǒng)</p>
<p></p>
<p></p>
<p>概述 </p>
<p>隨著政府上網(wǎng)和企業(yè)上網(wǎng)工程的全面展開,各個政府部門及企事業(yè)單位Internet應用越來越走向深入。各單位除了建網(wǎng)的一次性投資外,更多面臨的是日常網(wǎng)絡使用費的問題,這其中除專線月租費、端口費、IP地址費等固定費用外,長期、不確定的費用便是ISP收取的專線網(wǎng)絡數(shù)據(jù)流量費。 </p>
<p>專線用戶在使用網(wǎng)絡是經(jīng)常面臨這樣一種情況,由于上級ISP通常不提供上流量統(tǒng)計查詢手段,而是每月提供一張收費單,因此在收到上級ISP的流量收費清單之前,專線用戶單位往往不清楚自己的網(wǎng)絡使用及費用情況,無法控制每月的網(wǎng)絡使用費用。然而,即使是包月收費,專線用戶單位也對其內(nèi)部各個部門或IP地址的網(wǎng)絡使用情況做到心中有數(shù)。 </p>
<p>如此看來,按照“誰使用,誰付費”的原則,建立自己的網(wǎng)絡統(tǒng)計記費系統(tǒng),隨時掌握本單位各個部門及用戶的網(wǎng)絡使用情況,收取適當?shù)木W(wǎng)絡使用費用,將有利于加強網(wǎng)絡管理,保證網(wǎng)絡的合理、有效利用。 </p>
<p>網(wǎng)絡記費系統(tǒng)通常包括數(shù)據(jù)采集、數(shù)據(jù)統(tǒng)計、記費信息查詢、記費規(guī)則管理和用戶管理等方面。根據(jù)流量數(shù)據(jù)采集方式的不同,專線網(wǎng)絡記費系統(tǒng)大體可劃分為四種類型: </p>
<p>1、基于路由器的網(wǎng)絡記費系統(tǒng) </p>
<p>路由器本身具備流量統(tǒng)計功能,因此基于路由器的網(wǎng)絡記費系統(tǒng)定時讀取路由器MIB管理信息庫中的IP計費表,并將這些采集到的數(shù)據(jù)處理后裝入數(shù)據(jù)庫中,在此數(shù)據(jù)庫基礎上進行統(tǒng)計記費等管理工作。 </p>
<p>但為路由器增加流量統(tǒng)計任務必然會加重其工作負載,而且,與記費相關的數(shù)據(jù)變量如不及時讀取就會溢出,造成數(shù)據(jù)丟失。因此數(shù)據(jù)采集周期要求很短。這樣,越是網(wǎng)絡流量大的路由器就越是頻繁傳遞采集數(shù)據(jù),如此會使網(wǎng)絡帶寬更為擁擠。 </p>
<p>此外,由于這種記費方式是按IP地址統(tǒng)計流量,對于在公共網(wǎng)絡機房上網(wǎng)的用戶就無法統(tǒng)計其流量。另外,在采用DHCP進行IP地址動態(tài)分配時,無法分辨是哪臺機器或哪個用戶產(chǎn)生的流量。 </p>
<p>2、基于防火墻的網(wǎng)絡記費系統(tǒng) </p>
<p>有些防火墻產(chǎn)品帶有流量統(tǒng)計功能,因此也可以利用放火墻的監(jiān)控記錄進行流量統(tǒng)計,進而實現(xiàn)記費管理。 </p>
<p>3、基于以太網(wǎng)廣播特性的網(wǎng)絡記費系統(tǒng) </p>
<p>此方法利用了以太網(wǎng)的廣播傳輸特性,使以太網(wǎng)適配器NIC工作在混合模式,以捕獲局域網(wǎng)上每個以太網(wǎng)數(shù)據(jù)幀。通過分析每一幀,將表示幀長度的字段抽取出來,進而統(tǒng)計以太網(wǎng)上各個IP地址的網(wǎng)絡流量(當然也可統(tǒng)計IPX協(xié)議或其他網(wǎng)絡協(xié)議的流量),實現(xiàn)網(wǎng)絡計費。 </p>
<p>此方法要求以太網(wǎng)幀捕獲采集工作站與網(wǎng)絡出口路由器或邊界路由器必須處在同一網(wǎng)段上,即必須將路由器LAN端口與數(shù)據(jù)捕獲采集工作站連接在同一個共享式集線器上。由于此方法(通常也稱為Sniffer技術)只接收不發(fā)送,因此不占用網(wǎng)絡代寬,不增加路由器的工作負荷,對網(wǎng)絡和路由器工作無任何影響。 </p>
<p>4、基于代理服務器的網(wǎng)絡記費系統(tǒng) </p>
<p>大多數(shù)代理服務器軟件產(chǎn)品具有登記內(nèi)部網(wǎng)用戶訪問外部網(wǎng)的日志記錄,有些產(chǎn)品還可以直接將日志記錄到數(shù)據(jù)庫中。日志記錄包括用戶標志、客戶機IP地址、建立連接的時間、傳送字節(jié)數(shù)、請求連接遠程站點的URL等信息。根據(jù)日志記錄文件或數(shù)據(jù)庫,可以統(tǒng)計內(nèi)部網(wǎng)每個用戶的網(wǎng)絡流量以及上網(wǎng)時間,甚至可以按服務網(wǎng)絡類型(如:HTTP、SMTP、FTP等)分別進行統(tǒng)計。當然,基于代理服務器的數(shù)據(jù)流量統(tǒng)計方法同樣也適用于局域網(wǎng)撥號上網(wǎng)的情況。 </p>
<p>實現(xiàn)專線網(wǎng)絡記費有多種方式,選擇何種方式應該根據(jù)各單位的實際情況。總的說來,網(wǎng)絡記費系統(tǒng)應該結合各單位的網(wǎng)絡結構整體設計。 </p>
<p>基于代理服務器的網(wǎng)絡計費系統(tǒng) </p>
<p>下面詳細敘述一下Windows NT 4.0平臺上,基于微軟MS Proxy Server代理服務器的網(wǎng)絡計費系統(tǒng)的實現(xiàn)。 </p>
<p>1、開發(fā)環(huán)境 </p>
<p>操作系統(tǒng):Windows NT 4.0(sp3或更高) </p>
<p>代理服務器:MS Proxy Server </p>
<p>開發(fā)工具:Visual Basic 6.0 </p>
<p>2、總體設計 </p>
<p>利用代理服務器進行數(shù)據(jù)采集,進而進行流量統(tǒng)計,計算用戶的上網(wǎng)費用。系統(tǒng)應提供友好的管理和查詢接口,如用戶管理、費用管理、費用查詢,密碼修改等。 </p>
<p>3、具體實現(xiàn) </p>
<p>(1)數(shù)據(jù)采集 </p>
<p>這一步由代理服務器自動完成。為了讓代理服務器將日志記錄到數(shù)據(jù)庫文件中,還應完成以下幾步: </p>
<p>●安裝Microsoft SQL Server </p>
<p>●如果系統(tǒng)中沒有安裝ODBC驅(qū)動程序,還要先安裝ODBC驅(qū)動程序 </p>
<p>●設置系統(tǒng)DSN為Local Server,驅(qū)動程序為SQL Server </p>
<p>●利用SQL日志記錄表工具建表,具體方法為,訪問安裝代理服務器主機的http://myproxyserver/scripts/mkplog.exe頁面,根據(jù)提示生成日志記錄表。 </p>
<p>(2)流量統(tǒng)計及費用計算 </p>
<p>使用ADO連接,操縱日志記錄數(shù)據(jù)庫。將同一用戶名的記錄進行累加,并且根據(jù)預先設定的計費單價計算費用,結果保存到費用管理數(shù)據(jù)庫中。ADO的使用方法如下: </p>
<p>Public Sub main() </p>
<p>Dim conn As New ADODB.Connection </p>
<p>Dim cmd As New ADODB.Command </p>
<p>Dim rs As New ADODB.Recordset </p>
<p>注釋: 打開連接 </p>
<p>conn.Open "DSN=LocalServer;uid=sa;pwd=;database=master" </p>
<p>注釋: 創(chuàng)建命令 </p>
<p>Set cmd.ActiveConnection = conn </p>
<p>cmd.CommandText = "SELECT * from MspSrvLog" </p>
<p>注釋: 執(zhí)行命令 </p>
<p>rs.CursorLocation = adUseClient </p>
<p>rs.Open cmd, , adOpenStatic, adLockBatchOptimistic </p>
<p>注釋: 操作數(shù)據(jù) </p>
<p>rs!ClientUserName.Properties("Optimize") = True </p>
<p>rs.Sort = "ClientUserName" </p>
<p>rs.MoveFirst </p>
<p>Do While Not rs.EOF </p>
<p>Debug.Print "Name: " & rs! ClientUserName & "IP " rs!ClientIP </p>
<p>rs.MoveNext </p>
<p>Loop </p>
<p>注釋: 更新數(shù)據(jù) </p>
<p>conn.BeginTrans </p>
<p>注釋: 結束更新 </p>
<p>On Error GoTo ConflictHandler </p>
<p>rs.UpdateBatch </p>
<p>On Error GoTo 0 </p>
<p>conn.CommitTransExit Sub </p>
<p></p>
<p>ConflictHandler: </p>
<p>rs.Filter = adFilterConflictingRecords </p>
<p>rs.MoveFirst </p>
<p>Do While Not rs.EOF </p>
<p>Debug.Print "Conflict: Name: " & rs!ClientUserName; " " & rs!ClientUserName </p>
<p>rs.MoveNext </p>
<p>Loop </p>
<p>conn.Rollback </p>
<p>Resume Next </p>
<p>End Sub </p>
<p>(3)定時器 </p>
<p>為了實現(xiàn)系統(tǒng)的實時性,必須定時的進行流量統(tǒng)計和費用計算,因此需要有一個定時程序。VB中提供的Timer定時器最大的時間間隔是65536毫秒,也就是1分鐘多點,這是不能滿足我們的要求的。本系統(tǒng)為了給用戶提供更大的靈活性,可由用戶自行設定流量統(tǒng)計的時間間隔。在開始計費時初始化變量Next_Time=當前時間+用戶設定的時間間隔。定時器程序如下: </p>
<p>Private Sub Timer1_Timer() </p>
<p>Current_Time = Timer ‘獲取系統(tǒng)當前時間 </p>
<p>‘如果開始計費標志(Start)為真,且下次開始時間與當前系統(tǒng)時間差的絕對值 ‘小于等于60秒,則開始統(tǒng)計,同時修改變量Next_Time </p>
<p>If (start = True) And (Abs(Next_Time - Current_Time) <= 60) Then </p>
<p>‘Interval_Time為用戶設定的時間間隔,單位:秒 </p>
<p>Next_Time = Current_Time +60*Interval_Time </p>
<p>Call process </p>
<p>Else </p>
<p>Exit Sub </p>
<p>End If </p>
<p>End Sub </p>
<p>(4)用戶管理 </p>
<p>本系統(tǒng)與Windows NT的域用戶相結合,通過活動目錄服務接口可以方便地完成用戶的增加、刪除、鎖定、取消鎖定等工作。同時,用戶的增加刪除等任務還應與費用管理相結合。當向NT域中增加一個用戶時,也應在費用管理數(shù)據(jù)庫中增加該用戶;當從NT域中刪除一個用戶時,也應從費用管理數(shù)據(jù)庫中刪除該用戶。下面是一段向NT域中增加用戶的程序: </p>
<p>Private Sub User_Add() </p>
<p>Dim myComputer </p>
<p>Dim newUser </p>
<p>Dim sUsername </p>
<p>Dim sDescription </p>
<p>Dim sPassword </p>
<p></p>
<p>‘設置新用戶的屬性值 </p>
<p>sUsername=”yuansh” </p>
<p>sDescription=”Teacher” </p>
<p>sPassword=”password” </p>
<p></p>
<p>Set myComputer=GetObject(“WinNT://mymachine”) </p>
<p></p>
<p>‘為新用戶創(chuàng)建帳戶 </p>
<p>Set newUser=myComputer.Creat(“user”,sUsername) </p>
<p>newUser.SetInfo </p>
<p></p>
<p>newUser.Description=sDescription </p>
<p>newUser.Password=sPassword </p>
<p>newUser.SetInfo </p>
<p></p>
<p>End Sub </p>
<p>(5)費用管理和費用查詢 </p>
<p>費用管理和費用查詢都可以通過Data控件和MSFlexGrid控件結合費用管理數(shù)據(jù)庫來完成。具體做法為: </p>
<p>●在窗體上添加Data控件 </p>
<p>●將Data 控件的DatabaseName屬性設為費用管理數(shù)據(jù)庫的名稱,RecordSource屬性設為數(shù)據(jù)表的名稱 </p>
<p>●將MSFlexGrid控件的DataSource屬性設為Data控件的名稱 </p>
<p>這樣,就可以用MSFlexGrid控件顯示用戶費用數(shù)據(jù)。下面是一段用戶繳費管理的代碼: </p>
<p>Private Sub jf_ok_Click() </p>
<p>Dim dbusr As Database </p>
<p>Dim rsusr As Recordset </p>
<p>Dim dbnameusr As String </p>
<p>Dim temname As String </p>
<p>Dim MyUser As IADsUser </p>
<p></p>
<p>temname = jf_usr.Text ‘從文本框獲取用戶名 </p>
<p>dbnameusr = app.path & "usrinfo.mdb" ‘帶有絕對路徑的數(shù)據(jù)庫名 </p>
<p></p>
<p>Set dbusr = OpenDatabase(dbnameusr) ‘打開數(shù)據(jù)庫 </p>
<p>Set rsusr = dbusr.OpenRecordset("SELECT * FROM feiyong WHERE 用戶名=注釋:" & temname & "注釋:") </p>
<p></p>
<p>rsusr.Edit </p>
<p>rsusr.Fields("繳費日期").Value = Date </p>
<p>rsusr.Fields("繳納金額").Value = Val(jf_jine.Text) </p>
<p>rsusr.Fields("當前余額").Value = rsusr.Fields("繳納金額").Value + rsusr.Fields("上次余額") </p>
<p>rsusr.Update </p>
<p></p>
<p>End Sub </p>
<p>(6)統(tǒng)計分析 </p>
<p>統(tǒng)計分析主要是用Microsoft Chart Control 控件將某個時間段內(nèi)全部用戶訪問次數(shù)最多的幾個站點,上網(wǎng)時間最多的前幾名用戶等信息以圖表的形式表示出來,便于對網(wǎng)絡使用情況進行分析。 </p>
<p> </p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -