熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi開發嵌入式IE浏覽器監控程序

2013-11-11 21:06:37  來源: Delphi編程 

引言

  隨著網絡的發展和普及對網絡的監控日益成為網絡安全的必然要求也是管理和維護網絡的一個有效手段當前已經有多種應用比較廣泛的網絡監控和過濾程序如美萍網管weblocker等它們都可以實現基於網絡URL和IP地址的監控和過濾功能

  本文將對如何開發一個嵌入到IE浏覽器中的監控程序進行介紹該程序可以根據網絡URL和IP地址進行監控和過濾並且記錄系統日志從而使你對IE(當然是使用它的用戶)的所有操作一覽無余相信通過閱讀本文會加深你對網絡監控程序的理解以及提高你的COM編程能力和數據庫編程能力

  本文在Delphi 開發環境下實現數據庫使用桌面數據庫Access

基礎知識

  COM編程

  COM(Component Object Model組建對象模型)是微軟公司(Microsoft Company)提出的二進制通信規范用於軟件組件之間的跨越多個進程機器硬件和操作系統的互操作它是一項通過接口(Interface)透明的傳遞封裝數據的技術並且獨立於語言和操作平台一個COM對象是實現一個或者若干個接口的對象即COM對象借助接口輸出它所提供的服務

  IE浏覽器的體系結構

  IE浏覽器的體系結構如圖所示其中MSHTML是位於SHDOCVW和HTML頁面之間的COM對象SHDOCVW對象用於處理頁面的顯示而MSHTML用於處理頁面的語法分析並且將頁面中的標記轉換為元素MSHTML是一個COM服務器允許COM客戶端程序訪問它對外提供的服務

  實現IE浏覽器嵌入式編程的基本方法是建立COM對象從而以COM客戶端程序的形式和MSHTML COM服務器建立連接然後通過接口回調實現需要的控制功能也即首先建立COM對象實現系統規定的若干接口然後注冊COM對象並且將COM對象的有關信息寫入到IE浏覽器擴展功能指定的注冊表位置

嵌入式IE浏覽器監控程序的實現

  嵌入式IE浏覽器監控程序的實現主要包括監控程序的實現和維護程序的實現兩部分根據程序開發過程可以將其分為四個步驟下面分別對各個實現步驟進行詳細介紹

  實現COM對象

  開發COM對象的任務就是建立一個能夠與IE浏覽器的MSHTML COM服務器建立連接並且通過接口回調實現控制功能的COM對象具體實現過程如下:

  ()運行Delphi依次點擊File|New|Other切換到ActiveX頁面選擇ActiveX Library點擊OK按鈕即建立一個新的工程

  () 再次點擊File|New|Other切換到ActiveX頁面選擇COM Object點擊OK按鈕即出現如圖所示的COM Object Wizard界面去掉Included Type Library復選框在Class Name中輸入COM對象的名稱IEMonitor然後點擊OK按鈕即新建了一個名稱為TIEMonitor的COM對象(該COM對象的CLSID由系統自動生成)(見圖)

  ()將工程和單元文件依次保存為DIEMonitordpr和UIEMonitorpas切換到UIEMonitorpas單元文件編輯TIEMonitor的定義形式如下:

TIEMonitor = class(TComObject IDispatch IObjectWithSite)
public
 functionGetTypeInfoCount(out Count:Integer):HResult;stdcall;
 function GetTypeInfo(IndexLocaleID:Integer;out TypeInfo):HResult;stdcall;
 function GetIDsOfNames(const IID:TGUID;Names:Pointer;
 NameCountLocaleID: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; varParams; VarResult ExcepInfo ArgErr: Pointer): HResult; stdcall;
private
 IEThis:IWebBrowser;
 Cookie:Integer;
 protected
end;

  注意在UIEMonitorpas單元文件的Uses中需要手動加入對SHDOCVW Dialogs SysUtils Forms的引用

  其中主要是對IObjectWithSite接口的SetSite()方法和IDispatch接口的Invoke()方法的實現:首先通過SetSite()方法獲得IE的WebBrowser接口然後尋找連接點並且通過調用Advise()方法建立COM自身與連接點的連接;當連接建立成功後IE在事件引發後會調用連接到自身的IDispatch接口對象的Invoke方法不同的事件對應不同的DispID編碼因此可以通過在程序中判斷DispID對不同的事件做出相應的處理系統主要對BeforeNavigateDownLoadComplete和OnQuit三個事件進行處理它們對應的DispID分別為在Invoke()方法中根據DispID分別調用DoBeforeNavigate()DoDownLoadComplete()和DoOnQuit()函數實現相關處理和控制功能具體實現詳見程序源代碼

  ()編譯工程生成DIEMonitordll文件

  注冊/卸載COM對象

  注冊COM對象包括注冊COM對象以及將COM對象的有關信息寫入到IE浏覽器擴展功能指定的注冊表位置下面分別對其注冊方法進行介紹卸載方法分別和注冊方法相對應

  ()注冊/卸載COM對象一種方法是在Delphi開發環境下運行Run|Register ActiveX Server/Run|Unregister ActiveX Server自動完成COM對象的注冊/卸載;另一種方法是通過調用MS Windows操作系統提供的regsvrexe命令進行注冊

  () 注冊/卸載COM對象的有關信息到IE浏覽器擴展功能指定的注冊表位置將COM對象的CLSID寫入到IE浏覽器擴展功能指定的注冊表位置後當IE浏覽器啟動時就通過該CLSID查找COM對象有關信息(如文件路徑)從而實現了COM對象嵌入式功能擴展為了實現這個目的只需要在注冊表的[HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows\CurrentVersion\Explorer\Browser Helper Objects]項下建立一個名稱為COM對象的CLSID的注冊表項目即可

  開發監控模塊

  監控模塊主要完成對IE浏覽器的監控功能在Invoke()函數中觸發BeforeNavigator事件時調用執行主要包括ChkUrl()WriteSite()WriteLog()和GetIP()四個功能函數分別完成檢查URL(及IP地址)記錄URL和IP地址記錄系統日志根據URL取得IP地址的功能分別簡單介紹如下具體實現詳見程序源代碼

  ()ChkUrl()函數:它是監控模塊的核心函數也是模塊的入口函數ChkUrl()函數首先取得用戶請求的URL並且調用GetIP()函數取得其對應的IP地址然後到系統中查找該URL及IP是否已經存在如果存在則根據系統保存的結果禁止/允許用戶訪問否則就根據系統的當前工作狀態(禁止/允許)動態處理同時調用WriteSite()函數將該URL和IP地址保存到系統中最後調用WriteLog()函數記錄系統日志

  ()WriteSite()函數:完成將URL和IP地址保存到系統中的功能同時記錄系統當前日期和時間

  ()WriteLog()函數:將有關信息形成系統日志並且保存下來主要有網絡URL和IP地址用戶名稱訪問日期和時間處理結果(禁止/允許訪問)等信息

  ()GetIP()函數:提供根據URL取得對應IP地址的功能通過調用TNMHTTP組件的相關功能實現:首先將URL賦值給TNMHTTP組件的Host屬性然後調用ResolveRemoteHost()方法就可以從其RemoteIP屬性中獲得對應的IP地址

  開發維護程序

  維護程序主要實現系統參數維護和日志管理兩方面功能在啟動時需要管理員登錄

  ()系統參數維護:啟用/停止系統監控功能等程序界面如圖所示

  ()系統日志管理:日志的查詢打印等功能(見圖)

總結和系統進一步完善計劃

  本文詳細介紹了嵌入式IE浏覽器監控程序的開發方法和實現過程該系統以COM對象的形式嵌入到IE浏覽器中可以實現對IE浏覽器(即用戶)的監控功能


From:http://tw.wingwit.com/Article/program/Delphi/201311/8526.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.