新聞| | PChome| 登入
2007-11-16 03:22:18 | 人氣307| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

用 VB 禁止指定的程式 連接到外網

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

  系統概述

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

  系統功能

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

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

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

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

  功能的實現

  1、監控全部TCP連接

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

  在本文中討論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:   "  
     'CopyMemoryAPI函數  
    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    

台長: Kenny
人氣(307) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: 程式設計 |
此分類下一篇:SCRIPT . RUNAS
此分類上一篇:用bat 加上vbs 發信 不錯用

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文