• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB6.0實現網絡實時監控系統

    發布: 2007-5-25 09:19 | 作者: 鄧傳軍 | 來源: CSDN開發高手 | 查看: 74次 | 進入軟件測試論壇討論

    領測軟件測試網   計算機網絡技術的日益發展和普及,為信息共享提供了一條全球性的高速通道,但目前采用的TCP/IP協議族潛在著安全漏洞,其安全機制并不健全,如何保護企業內部網絡中的資源及信息不受外部攻擊者肆意破壞或盜竊,是企業網絡安全需要解決的重要問題。當我們擔心被黑客攻擊或懷疑電腦被植入木馬時,我們往往求助于防火墻,本系統即通過實時監控全部TCP連接的方法來實現防黑客攻擊。同時網絡管理人員在整個網絡運行期間,能否實時監控聯網計算機的運行狀態和操作對網絡安全具有極其重要的作用.下面就以Visual Basic 6.0作為開發工具講述兩個主要模塊的設計和實現。

      系統概述

      該系統由兩個子系統組成:服務器端系統和客戶端(工作站)系統。服務器端系統安裝在網絡管理人員的計算機上,用于實施各種對聯網計算機的監控操作;客戶端系統安裝在每臺聯網的計算機上,它運行后以圖標的方式出現在系統任務欄的提示區中,不影響工作站的其他操作,只用于響應服務器端的監控命令,并根據服務的需要,及時采樣工作站的相應數據返回給服務器端。該系統的運行環境可以運行于Win98、Win95或WinNT、Win2000下。在系統的開發中,引入了WINSOCK通訊控件,除此之外,為較好地實現各項監控操作,還用到了幾個API函數。

      系統功能

      1、監控全部TCP連接:實時監控所有服務器端口的連接情況、及時對異常連接發出警告并提示用戶刪除異常連接;

      2、屏幕監控:該功能允許服務器隨時把被監控工作站的屏幕畫面抓取到服務器中,網絡管理人員對相應工作站所進行的操作一目了然,若發現有非法操作即可采取發送警告或強制措施,強迫其停止相應操作;

      3、對工作站進行鎖機、關機、限制鼠標活動等;

      4、服務器和工作站之間的信息互送。

      功能的實現

      1、監控全部TCP連接

      TCP/IP(Transmission Control Protocol/Internet Protocol:傳輸控制協議/互聯網協議)是一個包括TCP、IP、 UDP、ARP、RARP和ICMP等在內的網絡協議集。TCP/IP經常被稱為“將Internet綁定在一起的粘合劑”,它允許在空間上分離的多個信息網絡連接在一起形成一個巨大的虛擬網絡。TCP和UDP(用戶數據報協議)是兩個最常用的數據傳輸協議,它們都使用設置監聽端口的方法來完成數據傳輸。

      在本文中討論TCP連接。通過使用TCP, Internet客戶機可以打開到另一個Internet客戶機的虛擬連接并傳送數據流。與UDP不同,TCP協議通過重傳丟失的數據報保證傳輸的可靠性。它也保證在接收端的應用程序按發送的順序將接收到的位和字節重新組裝起來以獲取完整的數據。

      要獲得與服務器系統中全部有效的TCP連接,用到GetTcpTable這個API函數,它定義如下:

    Private Declare Function GetTcpTable Lib "iphlpapi.
    dll" (ByRef pTcpTable As MIB_TCPTABLE, ByRef
    pdwSize As Long, ByVal bOrder As Long) As Long

      其中參數pPcpTable是已生成的 TCP連接表緩沖區的指針,參數pdwsize是緩沖區大。ó斁彌_區不夠大時,該參數返回實際需要的大。,參數bOrder指示連接表是否需要按“Local IP”、“Localport”、“Remote IP”、“Remote port”依次進行排序,1為按此順序。

      通過一個TIMEER控件的TIMER的事件來比較前后兩個TCP連接表,我們可以立即發現異常并發出警告。本系統用聲音和報警標志提醒用戶注意可能的外界入侵。收到警告信號后,我們應首先將可疑連接刪除掉,SetTcpEntry函數可以幫助我們刪除可疑連接。其定義為:

    Private Declare Function SetTcpEntry Lib "iphlpapi.
    dll" (ByRef pTcpTable As MIB_TCPROW) As Long

      其中參數pTcptable為指向tcp表行的指針。然后將欲刪連接的狀態置為MIB_TCP_STATE_DELETE_TCB(值為12)即可刪除該連接。

      TIMER事件源代碼:

    Private Sub Timer1_Timer()
     Dim Return1 As Long, i As Long
     Dim Tmp1 As Long, Tmp2 As Long
     Dim Ip_Buf(1 To 4) As Byte
     Dim Win_Path As String, Tmp3 As String
     Return1 = GetTcpTable(TCP1, Len(TCP1), 1)
     If Last_Num_Of_Entries <> 0 And _
       Last_Num_Of_Entries <> TCP1.dwNum_Of_Entries Then
      '異常時發出警告
      Picture1.Visible = True   '警告標志
      On Error Resume Next
      Win_Path = String(145, 0)
      '利用API函數GetWindowsDirectory獲得當前系統目錄
      i = GetWindowsDirectory(Win_Path, 145)
      Win_Path = Left(Win_Path, i)
      '利用API函數sndPlaySound發出報警聲音
      i = sndPlaySound(Win_Path + "\Media\Ding.wav", &H1)
      On Error GoTo 0
     Else
      If Picture1.Visible = True Then
       Picture1.Visible = False
      End If
     End If
     Last_Num_Of_Entries = TCP1.dwNum_Of_Entries
     Select Case Return1
      Case 0&:
       Text1 = "": Combo1.Clear
       For i = 0 To TCP1.dwNum_Of_Entries - 1
        Tmp3 = Str(i + 1) + " "
        Select Case TCP1.TCP_Table(i).dwState
         ' 顯示連接狀態
        Case 1: Tmp3 = Tmp3 + "CLOSED"
        Case 2: Tmp3 = Tmp3 + "LISTENING"
        Case 3: Tmp3 = Tmp3 + "SYN_SENT"
        Case 4: Tmp3 = Tmp3 + "SYN_RCVD"
        Case 5: Tmp3 = Tmp3 + "ESTABLISHED"
        Case 6: Tmp3 = Tmp3 + "FIN_WAIT1"
        Case 7: Tmp3 = Tmp3 + "FIN_WAIT2"
        Case 8: Tmp3 = Tmp3 + "CLOSE_WAIT"
        Case 9: Tmp3 = Tmp3 + "CLOSING"
        Case 10: Tmp3 = Tmp3 + "LAST_ACK"
        Case 11: Tmp3 = Tmp3 + "TIME_WAIT"
        Case 12: Tmp3 = Tmp3 + "DELETE_TCB"
        End Select
        Combo1.AddItem Tmp3 ' 填充列表以供用戶刪除
        ' 本地IP
        Tmp3 = Tmp3 + ":" + vbCrLf + vbTab + "Local: "
        'CopyMemory為API函數
        CopyMemory Ip_Buf(1), TCP1.TCP_Table(i).dwLocalAddr, 4
        Tmp3 = Tmp3 + CStr(Ip_Buf(1)) + "." + _
    CStr(Ip_Buf(2)) + "."+ CStr(Ip_Buf(3)) _
    +"." + CStr(Ip_Buf(4))
        Tmp1 = TCP1.TCP_Table(i).dwLocalPort
        ' 本地端口
        Tmp2 = Tmp1 / 256 + (Tmp1 Mod 256) * 256
        ' 遠程IP
        Tmp3 = Tmp3 + ":" + Str(Tmp2) + vbTab + "Remote: "
        CopyMemory Ip_Buf(1), TCP1.TCP_Table(i).dwRemoteAddr, 4
        Tmp3 = Tmp3 + CStr(Ip_Buf(1)) + "." + CStr(Ip_Buf(2)) _
    + "."+ CStr(Ip_Buf(3)) + "." + CStr(Ip_Buf(4))
        ' 遠程端口
        Tmp1 = TCP1.TCP_Table(i).dwRemotePort
        Tmp2 = Tmp1 / 256 + (Tmp1 Mod 256) * 256
        Tmp3 = Tmp3 + ":" + Str(Tmp2) + vbCrLf
        Text1 = Text1 + Tmp3
       Next i
      Case 50&:
       MsgBox "系統不支持該API函數": End
      Case 87:
       MsgBox "無效的參數": End
      Case 111&:
       MsgBox "緩沖區溢出": End
      Case 232&:
       MsgBox "無數據": End
      End Select
    End Sub


      用于刪除連接的CLICK事件源代碼:

    Private Sub delete_Click()
     Dim Return1 As Long
     If Combo1.ListIndex < 0 Then Exit Sub
     ' 將欲刪連接的狀態置為值為12
     TCP1.TCP_Table(Combo1.ListIndex).dwState = 12  
     ' 執行刪除
     Return1 = SetTcpEntry(TCP1.TCP_Table(Combo1.ListIndex))
     If Return1 = 0 Then
      MsgBox "刪除成功"
     Else
      MsgBox "刪除失敗"
     End If
     Timer1_Timer
    End Sub
     2、屏幕監控

      當服務器系統發現TCP異常連接時,可通過屏幕監控功能將局域網中被監控工作站的屏幕畫面抓取到服務器中并實施相應措施,如對工作站鎖機或關機等。此處用到WINSOCK控件,其通訊原理請參閱相關資料,屏幕監控功能用到TCP協議,為了達到更好的效果,可在窗體中加入TIMER控件,設定TIMER事件。

      (1) 工作站端 

      偵聽并響應服務器端發出的連接請求和屏幕抓取。其中屏幕抓取功能可通過API函數實現:

    Dim a As String
    Winsock1.GetData a, vbString
    Select Case a
     Case "zp"
      Picture1.AutoRedraw = True
      Picture1.ScaleMode = 1
      lDesktop = GetDesktopWindow()
      lDC = GetDC(lDesktop)
      BitBlt Picture1.hdc, 0, 0, Screen.Width, _
    Screen.Height, lDC,0, 0, vbSrcCopy
      '獲取圖像數組
      SavePicture Picture1.Image, filename
      Winsock1.SendData "okm"
      Dim myfile() As Byte
     Case "fir" '傳第一塊圖
      Open filename For Binary As #1
      filelen = LOF(1)
      ReDim myfile(1 To blocksize) As Byte  
      '(const blocksize=3072)
      Get #1, , myfile
      Winsock1.SendData myfile
      curpos = blocksize
     Case "next"  ‘傳其它塊
      If curpos = filelen Then
       Winsock1.SendData "end"
       Close #1
      Exit Sub
     End If
     j = curpos + blocksize
     If j > filelen Then
      j = filelen - curpos
     Else
      j = blocksize
     End If
     ReDim myfile(1 To j) As Byte
     Get #1, , myfile
     Winsock1.SendData myfile
     curpos = curpos + j
    End Select

      注意:以上功能在WINSOCK的DataArrival事件中實現。抓取的圖象數據量較大,所以需要分塊傳輸。

      (2) 服務器端

    DataArrival 事件代碼:
    Dim receivefile() As Byte
    ReDim receivefile(bytesTotal) As Byte
    Winsock1.GetData receivefile, vbArray + vbByte
    '告訴Winsock控件收到的是字節數組類型的數據
    If Chr(receivefile(0)) = "o" And _
    Chr(receivefile(1)) = "k" And _
    Chr(receivefile(2)) = "m" Then
     If Dir$(filename) <> "" Then Kill filename
     ' 打開文件,準備存儲圖像
     Open filename For Binary As #1   
     filelen = 0
     Winsock1.SendData "fir"
     Exit Sub
    End If
    If Chr(receivefile(0)) = "e" And _
    Chr(receivefile(1)) = "n" And _
    Chr(receivefile(2)) = "d" Then
     Label1.Caption = "end"
     Close #1
     Picture1.Picture = LoadPicture(filename) '顯示圖象
     Exit Sub
    End If
    Put #1, , receivefile
    Winsock1.SendData "next"

      3、其它功能

      主要用到一些API函數,如實現屏幕鎖定和解鎖操作可使用Enable Window,實現關機功能用ExitWindowsEx, 服務器和工作站之間的信息互送用到WINSOCK控件的UDP協議,具體用法請參閱有關資料。

      結束語

      通過在基本的網絡監控系統增加入侵檢測,就能夠極大提高網絡的整體安全性,使之更靈敏、更智能,大大降低入侵的成功率。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>