DimtmpstrAsString'存放捕獲的數據
DimNOW_OUTAsInteger'總共出去連接的有幾個Winsock
PrivateSubCommand1_Click()
ListPorts.AddItemtxtADDPORT.Text'把文本框中的端口增加到列表框中
EndSub
PrivateSubCommand2_Click()
OnErrorResumeNext'如出錯就在下一個端口重新開始監聽
IfCommand2.Caption="監聽"Then
Fori=0ToListPorts.ListCount-1'如果命令框為'監聽',則初始化要監聽的端口數量I
LoadWinsock1(i+1)'加載監聽端口的winsock1數組控件
Winsock1(i+1).LocalPort=ListPorts.List(i)'使每一個WINSOCK數組變量對應一個端口
Winsock1(i+1).Listen'監聽
Nexti
Command2.Caption="停止"
Else
Fori=1ToWinsock1.Count-1
UnloadWinsock1(i)
Nexti'假如caption為停止,則卸載WINSOCK1數組控件
Fori2=1ToWinsock2.Count-1
UnloadWinsock2(i2)
Nexti2
Command2.Caption="監聽"
EndIf
EndSub
PrivateSubCommand3_Click()
UnloadMe
EndSub
PrivateSubForm_Load()
txtLOG.Text="日誌:"&vbCrLf
NOW_OUT=1
EndSub'在窗體載入時初始化日誌文件和連接變量
PrivateSubWinsock1_ConnectionRequest(IndexAsInteger,ByValrequestIDAsLong)
LoadWinsock2(NOW_OUT)'加載建立連接的Winsock2數組控件
Winsock2(NOW_OUT).AcceptrequestID'建立連接
Winsock1(Index).Close
Winsock1(Index).Listen'Winsock1繼續監聽
NOW_OUT=NOW_OUT+1'連接的控件累加
myAddLog"來自"&Winsock1(Index).RemoteHostIP&"連接到本地端口:"&Winsock1(Index).LocalPort'顯示捕獲的連接
EndSub'在WINSOCK2建立連接的同時,WINSOCK1進行監聽遠程掃描本地端口
PrivateSubWinsock2_DataArrival(IndexAsInteger,ByValbytesTotalAsLong)
Winsock2(Index).GetDatatmpstr'通過Getdata函數捕獲數據
myAddLog"來自"&Winsock2(Index).RemoteHostIP&"的數據:"&tmpstr'顯示捕獲的數據
EndSub'用WINSOCK2獲取數據並加入到日誌
SubmyAddLog(tmptextAsString)'加入日誌
tmptext=tmptext&vbCrLf
txtLOG.SelStart=Len(txtLOG.Text)
txtLOG.SelText=tmptext
EndSub'自動增加日誌內容,並高亮顯示當前所捕捉到的數據
程序說明:這是一個簡單的監聽程序,並不具有分析的功能,因此,它不是一個入侵檢測係統,而是入侵檢測係統的前半部分--數據收集。它是通過winsock(係統本身提供的組件)本身的功能,簡單的實現對本地斷口的監聽和對到達本地的數據進行捕獲。
總結
入侵檢測作為一種積極主動地安全防護技術,提供了對內部攻擊、外部攻擊和誤操作的實時保護,在網絡係統受到危害之前攔截和響應入侵。入侵檢測係統麵臨的最主要挑戰有兩個:一個是虛警率太高,一個是檢測速度太慢。現有的入侵檢測係統還有其他技術上的致命弱點。因此,可以這樣說,入侵檢測產品仍具有較大的發展空間,從技術途徑來講,除了完善常規的、傳統的技術(模式識別和完整性檢測)外,應重點加強統計分析的相關技術研究。
但無論如何,入侵檢測不是對所有的入侵都能夠及時發現的,即使擁有當前最強大的入侵檢測係統,如果不及時修補網絡中的安全漏洞的話,安全也無從談起。