公司架設了SNMP來收集網路流量,但每台電腦對外的流量紀錄,則沒透過SNMP收集,原本想針對各台電腦做SNMP,但這樣似乎不合乎成本,直接從防火牆來查看流量似乎更簡單些。
筆者目前不定時連上SonicWall防火牆查看紀錄,透過Log->Report設定Data Collection,即可收集每個連外IP的使用量排行,可以很快看到誰佔用頻寬。
後來筆者做了一個資料收集的程式,複製網頁內容,往該程式貼上後,即可自動將資料存到資料庫中查看。
網頁畫面:
使用到的資料表如下:
BUbyIP_Id 網路用量紀錄索引
欄位名稱 | 說明 |
---|---|
Id | 索引 |
DateTime | 日期 |
Days | 天數 |
BUbyIP_Data 網路用量明細
欄位名稱 | 說明 |
---|---|
Id | 索引 |
Ranking | 排名 |
IP | IP |
PC_NAME | 電腦名稱 |
Size | 傳輸量 |
Unit | 單位 |
程式界面如下:
資料處理方式,大致上使用Split來依照行與欄位進行切割,透過換行符號(vbCrLf)與Tab標記(vbTab)來細分資料,然後轉入資料庫內儲存。資料內容,直接參考地點資料表中的IP位址來查看是誰使用,以便達到紀錄與檢查的效果。
「貼上」按鈕:
Private Sub cmd_Paste_Click()
Text_Log = ""
Text_Log.SetFocus
DoCmd.RunCommand acCmdPaste
End Sub
「匯入資料」按鈕:
Private Sub cmd_CollactionData_Click()
If Text_Log = "" Then Exit Sub
strNow = Now
strTarget = "Elapsed Collection Time:"
i = InStr(Text_Log, strTarget) + Len(strTarget)
i2 = InStr(Mid(Text_Log, i, Len(Text_Log)), vbCrLf) - 1
strDays = Mid(Text_Log, i, i2)
strSQL = "SELECT * FROM BUbyIP_Idx"
Set m = CurrentDb.OpenRecordset(strSQL)
m.AddNew
m("DateTime") = strNow
m("Days") = strDays
strID = m("Id")
m.Update
'strID = 1
strTarget = "Received Data" & vbCrLf & "1"
i = InStr(Text_Log, strTarget) + Len(strTarget) - 1
strData = Mid(Text_Log, i, Len(Text_Log))
tmp1 = Split(strData, vbCrLf)
strSQL = "SELECT * FROM BUbyIP_Data"
Set m = CurrentDb.OpenRecordset(strSQL)
For i = 0 To UBound(tmp1)
tmp2 = Split(tmp1(i), vbTab)
m.AddNew
m("Id") = strID
m("Ranking") = tmp2(0)
m("IP") = tmp2(1)
m("PC_NAME") = DLookup("PC_NAME", "Q_IP_List", "IP='" & m("IP") & "'")
tmp3 = Split(tmp2(2), " ")
m("Size") = tmp3(0)
m("Unit") = tmp3(1)
m.Update
Next i
Text_Log = ""
List_BUbyIP_Idx.Requery
List_BUbyIP_Data.Requery
End Sub