開發(fā)嵌入式IE瀏覽器監(jiān)控程序
發(fā)表時間:2024-06-06 來源:明輝站整理相關軟件相關文章人氣:
[摘要]引 言 隨著網(wǎng)絡的發(fā)展和普及,對網(wǎng)絡的監(jiān)控日益成為網(wǎng)絡安全的必然要求,也是管理和維護網(wǎng)絡的一個有效手段。當前已經(jīng)有多種應用比較廣泛的網(wǎng)絡監(jiān)控和過濾程序,如美萍網(wǎng)管、we-blocker等,它們都可以實現(xiàn)基于網(wǎng)絡URL和IP地址的監(jiān)控和過濾功能! ”疚膶θ绾伍_發(fā)一個嵌入到IE瀏覽器中的監(jiān)控程...
引 言
隨著網(wǎng)絡的發(fā)展和普及,對網(wǎng)絡的監(jiān)控日益成為網(wǎng)絡安全的必然要求,也是管理和維護網(wǎng)絡的一個有效手段。當前已經(jīng)有多種應用比較廣泛的網(wǎng)絡監(jiān)控和過濾程序,如美萍網(wǎng)管、we-blocker等,它們都可以實現(xiàn)基于網(wǎng)絡URL和IP地址的監(jiān)控和過濾功能。
本文將對如何開發(fā)一個嵌入到IE瀏覽器中的監(jiān)控程序進行介紹,該程序可以根據(jù)網(wǎng)絡URL和IP地址進行監(jiān)控和過濾,并且記錄系統(tǒng)日志,從而使你對IE(當然是使用它的用戶)的所有操作一覽無余。相信通過閱讀本文,會加深你對網(wǎng)絡監(jiān)控程序的理解,以及提高你的COM編程能力和數(shù)據(jù)庫編程能力。
本文在Delphi 6開發(fā)環(huán)境下實現(xiàn),數(shù)據(jù)庫使用桌面數(shù)據(jù)庫Access 2000。
基礎知識
1.COM編程
COM(Component Object Model,組建對象模型)是微軟公司(Microsoft Company)提出的二進制通信規(guī)范,用于軟件組件之間的跨越多個進程、機器、硬件和操作系統(tǒng)的互操作,它是一項通過接口(Interface)透明的傳遞封裝數(shù)據(jù)的技術,并且獨立于語言和操作平臺。一個COM對象是實現(xiàn)一個或者若干個接口的對象,即COM對象借助接口輸出它所提供的服務。
2.IE瀏覽器的體系結(jié)構
IE瀏覽器的體系結(jié)構如圖1所示。其中MSHTML是位于SHDOCVW和HTML頁面之間的COM對象,SHDOCVW對象用于處理頁面的顯示,而MSHTML用于處理頁面的語法分析,并且將頁面中的標記轉(zhuǎn)換為元素。MSHTML是一個COM服務器,允許COM客戶端程序訪問它對外提供的服務。
實現(xiàn)IE瀏覽器嵌入式編程的基本方法是建立COM對象,從而以COM客戶端程序的形式和MSHTML COM服務器建立連接,然后通過接口回調(diào)實現(xiàn)需要的控制功能。也即首先建立COM對象,實現(xiàn)系統(tǒng)規(guī)定的若干接口,然后注冊COM對象,并且將COM對象的有關信息寫入到IE瀏覽器擴展功能指定的注冊表位置。
[page_break]
嵌入式IE瀏覽器監(jiān)控程序的實現(xiàn)
嵌入式IE瀏覽器監(jiān)控程序的實現(xiàn)主要包括監(jiān)控程序的實現(xiàn)和維護程序的實現(xiàn)兩部分,根據(jù)程序開發(fā)過程,可以將其分為四個步驟,下面分別對各個實現(xiàn)步驟進行詳細介紹。
1.實現(xiàn)COM對象
開發(fā)COM對象的任務就是建立一個能夠與IE瀏覽器的MSHTML COM服務器建立連接并且通過接口回調(diào)實現(xiàn)控制功能的COM對象,具體實現(xiàn)過程如下:
(1)運行Delphi,依次點擊File New Other,切換到ActiveX頁面,選擇ActiveX Library,點擊OK按鈕,即建立一個新的工程。
(2) 再次點擊File New Other,切換到ActiveX頁面,選擇COM Object,點擊OK按鈕,即出現(xiàn)如圖2所示的COM Object Wizard界面,去掉Included Type Library復選框,在Class Name中輸入COM對象的名稱IEMonitor,然后點擊OK按鈕,即新建了一個名稱為TIEMonitor的COM對象(該COM對象的CLSID由系統(tǒng)自動生成)(見圖2)。
(3)將工程和單元文件依次保存為DIEMonitor.dpr和UIEMonitor.pas。切換到UIEMonitor.pas單元文件,編輯TIEMonitor的定義形式如下:
TIEMonitor = class(TComObject, IDispatch, IObjectWithSite)
public
function GetTypeInfoCount(out Count:Integer):HResult;stdcall;
function GetTypeInfo(Index,LocaleID:Integer;out TypeInfo):HResult;stdcall;
function GetIDsOfNames(const IID:TGUID;Names:Pointer;
NameCount,LocaleID:Integer;DispIDs:Pointer):HResult;stdcall;
function SetSite(const pUnkSite:IUnknown):HResult;stdcall;
function GetSite(const riid:TIID;out site:IUnknown):HResult;stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
private
IEThis:IWebBrowser2;
Cookie:Integer;
protected
end;
注意在UIEMonitor.pas單元文件的Uses中需要手動加入對SHDOCVW, Dialogs, SysUtils, Forms的引用。
其中主要是對IObjectWithSite接口的SetSite()方法和IDispatch接口的Invoke()方法的實現(xiàn):首先通過SetSite()方法獲得IE的WebBrowser接口,然后尋找連接點,并且通過調(diào)用Advise()方法建立COM自身與連接點的連接;當連接建立成功后,IE在事件引發(fā)后,會調(diào)用連接到自身的IDispatch接口對象的Invoke方法,不同的事件對應不同的DispID編碼,因此可以通過在程序中判斷DispID對不同的事件做出相應的處理。系統(tǒng)主要對BeforeNavigate2、DownLoadComplete和OnQuit三個事件進行處理,它們對應的DispID分別為250、104和253。在Invoke()方法中,根據(jù)DispID分別調(diào)用DoBeforeNavigate2()、DoDownLoadComplete()和DoOnQuit()函數(shù)實現(xiàn)相關處理和控制功能,具體實現(xiàn)詳見程序源代碼。
(4)編譯工程,生成DIEMonitor.dll文件。
[page_break]
2.注冊/卸載COM對象
注冊COM對象包括注冊COM對象,以及將COM對象的有關信息寫入到IE瀏覽器擴展功能指定的注冊表位置,下面分別對其注冊方法進行介紹。卸載方法分別和注冊方法相對應。
(1)注冊/卸載COM對象。一種方法是在Delphi開發(fā)環(huán)境下運行Run Register ActiveX Server/Run Unregister ActiveX Server自動完成COM對象的注冊/卸載;另一種方法是通過調(diào)用MS Windows操作系統(tǒng)提供的regsvr32.exe命令進行注冊。
(2) 注冊/卸載COM對象的有關信息到IE瀏覽器擴展功能指定的注冊表位置。將COM對象的CLSID寫入到IE瀏覽器擴展功能指定的注冊表位置后,當IE瀏覽器啟動時,就通過該CLSID查找COM對象有關信息(如文件路徑),從而實現(xiàn)了COM對象嵌入式功能擴展。為了實現(xiàn)這個目的,只需要在注冊表的[HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows\CurrentVersion\Explorer\Browser Helper Objects]項下,建立一個名稱為COM對象的CLSID的注冊表項目即可。
3.開發(fā)監(jiān)控模塊
監(jiān)控模塊主要完成對IE瀏覽器的監(jiān)控功能,在Invoke()函數(shù)中觸發(fā)BeforeNavigator2事件時調(diào)用執(zhí)行,主要包括ChkUrl()、WriteSite()、WriteLog()和GetIP()四個功能函數(shù),分別完成檢查URL(及IP地址)、記錄URL和IP地址、記錄系統(tǒng)日志、根據(jù)URL取得IP地址的功能,分別簡單介紹如下,具體實現(xiàn)詳見程序源代碼。
(1)ChkUrl()函數(shù):它是監(jiān)控模塊的核心函數(shù),也是模塊的入口函數(shù)。ChkUrl()函數(shù)首先取得用戶請求的URL,并且調(diào)用GetIP()函數(shù)取得其對應的IP地址,然后到系統(tǒng)中查找該URL及IP是否已經(jīng)存在,如果存在則根據(jù)系統(tǒng)保存的結(jié)果禁止/允許用戶訪問,否則就根據(jù)系統(tǒng)的當前工作狀態(tài)(禁止/允許)動態(tài)處理,同時調(diào)用WriteSite()函數(shù)將該URL和IP地址保存到系統(tǒng)中。最后調(diào)用WriteLog()函數(shù)記錄系統(tǒng)日志。
(2)WriteSite()函數(shù):完成將URL和IP地址保存到系統(tǒng)中的功能,同時記錄系統(tǒng)當前日期和時間。
(3)WriteLog()函數(shù):將有關信息形成系統(tǒng)日志并且保存下來,主要有網(wǎng)絡URL和IP地址、用戶名稱、訪問日期和時間、處理結(jié)果(禁止/允許訪問)等信息。
(4)GetIP()函數(shù):提供根據(jù)URL取得對應IP地址的功能,通過調(diào)用TNMHTTP組件的相關功能實現(xiàn):首先將URL賦值給TNMHTTP組件的Host屬性,然后調(diào)用ResolveRemoteHost()方法,就可以從其RemoteIP屬性中獲得對應的IP地址。
4.開發(fā)維護程序
維護程序主要實現(xiàn)系統(tǒng)參數(shù)維護和日志管理兩方面功能,在啟動時需要管理員登錄。
(1)系統(tǒng)參數(shù)維護:啟用/停止系統(tǒng)監(jiān)控功能等,程序界面如圖3所示。
(2)系統(tǒng)日志管理:日志的查詢、打印等功能(見圖4)。
總結(jié)和系統(tǒng)進一步完善計劃
本文詳細介紹了嵌入式IE瀏覽器監(jiān)控程序的開發(fā)方法和實現(xiàn)過程,該系統(tǒng)以COM對象的形式嵌入到IE瀏覽器中,可以實現(xiàn)對IE瀏覽器(即用戶)的監(jiān)控功能。