過濾鉤子驅動程式一(微軟DDK文件,FLASHSKY翻譯) (轉)

gugu99發表於2008-03-02
過濾鉤子驅動程式一(微軟DDK文件,FLASHSKY翻譯) (轉)[@more@]

本章說明過濾鉤子. 一個過濾鉤子驅動程式是用於操作中的一個IP過濾驅動程式的上下文
中處理或過濾包,過濾鉤子驅動程式擴充套件了IP過濾驅動程式的功能。下面主題描述了過濾鉤子驅動程式
的一些特性, 解釋怎樣建立過濾鉤子並列出實現一個過濾鉤子驅動程式相關的輸入輸出控制程式碼的參考
資訊:
  1.1 關於過濾鉤子驅動程式
   一個過濾鉤子驅動程式是一個用於過濾網路包的核心驅動程式. 一個過濾鉤子驅動程式擴充套件系統提
供的IP過濾驅動程式的功能。一個過濾鉤子驅動程式僅僅只能於2000及其之後的系統上。僅僅只有一個
過濾鉤子驅動程式能被安裝在系統之上並且被IP過濾驅動程式使用。如果一個過濾鉤子驅動程式的指向用於
IP過濾驅動程式的擴充套件鉤子指標為空,那麼他只能使用IP過濾驅動程式註冊自己。一旦一個過濾鉤子驅動程
序使用了IP過濾驅動程式註冊自己,IP過濾程式給這個IP過濾程式的擴充套件鉤子分派,用這種方法,
這個IP過濾驅動程式確保自己只能接受和使用單個的過濾鉤子驅動程式.

  1.2 建立一個過濾鉤子驅動程式
   一個過濾鉤子驅動程式在包過濾不能滿足過濾網路包時候來建立。模式應用程式使用這些API來
建立和管理系統在IP過濾驅動程式中提供的輸出和輸入過濾器。更多API資訊檢視SDK。
   一個過濾鉤子驅動程式是在核心模式驅動程式下開發的. 另外, 一個過濾鉤子驅動程式完成一個過濾鉤
子回撥函式並在系統提供的IP過濾驅動程式中註冊這個回撥函式. 這個回撥函式被看作一個過濾鉤子。這個
IP過濾驅動程式以後使用這個過濾鉤子以決定怎樣處理到達和輸出的包.

   下面的章節將說明怎樣建立一個過濾鉤子驅動程式
  1.2.1 建立過濾鉤子
   一個過濾鉤子在一個PacketFilterExtensionPtr型別的函式時被建立。
   當一個過濾鉤子驅動程式在系統提供的IP過濾驅動程式中註冊自己的過濾鉤子實體指標時 ,這個過濾鉤子
驅動程式給他的過濾鉤子提供符號地址. 因為一個過濾鉤子驅動程式提供這個地址, 而不是名字,這個過濾鉤
子可以選擇任何名字。當然,好的程式習慣是用其基本的功能來命名這個過濾鉤子的名字。
   一個過濾鉤子對到達與發出的包進行特定的動作,他將與IP過濾驅動程式傳送給過濾鉤子來檢查怎樣的包
將進一步處理的資訊與到達的特定資訊做比較。在過濾鉤子檢查包以後,他將使用PF_FORWARD, PF_DROP, 或
PF_PASS返回響應程式碼給IP過濾驅動程式怎樣處理的資訊:
  PF_FORWARD
  規定給IP過濾驅動程式馬上返回轉發響應給IP棧. 對於本地包, IP轉發他們到棧頂. 如果包目標地址為外
部機器並且允許, IP路由他們到對應的路由.
  PF_DROP
  規定給IP過濾驅動程式馬上返回drop響應給IP棧. IP將drop這個包.
  PF_PASS
   規定給IP過濾驅動程式過濾這個包並且返回這個結果響應給IP棧. IP過濾驅動程式怎樣處理這個過濾包決
定於他怎樣在Packet Filtering API中做的設定. 過濾鉤子如果他檢查到他不能處理的包但將允許IP過濾驅動
程式過濾包的時候返回這個pass響應。

  1.2.2 過濾鉤子例子
   本節顯示了一個簡單的過濾鉤子基於某幾個固定的包屬性來構成forward和drop檢查. 這個過濾鉤子指定
drop TCP包而forward其他的包.
   注意:如果特定或TCP/UDP埠的包必須被過濾,考慮使用包過濾API替代建立一個使用者模式的應用
程式。這些API了系統提供的IP過濾驅動程式處理包而不需要在其上關聯一個過濾鉤子驅動程式.
 
  #define PROT_TCP  6
  // Drop all TCP packets
  PF_FORWARD_ACTION
  DropTcpPackets(
    unsigned char  *PacketHeader,
    unsigned char  *Packet,
    unsigned int  PacketLength,
    unsigned int  RecvInterfaceIndex,
    unsigned int  SendInterfaceIndex,
     IPAddr      RecvLinkNextHop,
     IPAddr      SendLinkNextHop
    )
  {
  if (PacketHeader->iph_protocol == PROT_TCP)
  {
    return PF_DROP;
  }
  return PF_FORWARD;
 }

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1000280/,如需轉載,請註明出處,否則將追究法律責任。

相關文章