WFP之WFP簡介


·過濾引擎是WFP的核心組成部分,過濾引擎分為兩大層:用戶態基礎過濾引擎和內核態過濾引擎。基礎過濾引擎會與內核過濾引擎交互。
·內核態過濾引擎是整個過濾引擎的主體,內部分為多個分層,每分層都代表着網絡協議棧特定的層。每個分層存在子層和過濾器。內核過濾引擎檢查網絡數據包是否
命中過濾器的規則,命中的過濾器,執行這些過濾器指定的動作。
·一般,過濾的動作為放行或攔截網絡數據包。實際中,內核過濾引擎的分層中,存在多個子層和多個過濾器。一次網絡事件,可能同時命中多個過濾器的規則,而且
這些過濾器可能有不同的過濾動作。為了計算最終的過濾動作,WFP引入了過濾仲裁器,過濾仲裁器計算最終的過濾動作交給內核態過濾引擎,然后內核態過濾引擎將
結果反饋給墊片。
·墊片是一種特殊的內核模塊,安插在系統的網絡協議棧的不同層中,獲取網絡協議棧的數據,通過內核過濾引擎提供的API,將數據傳到相應的WFP分層中。作用有
二種:獲取網絡數據傳遞給內核態過濾引擎,把內核態過濾引擎的過濾結果反饋給網絡協議棧。對於開發者是透明的。
·呼出接口是WFP框架中的重要數據結構,也是能力的擴展。由一系列回調函數組成,當網絡數據命中過濾器且此過濾器定義了一個呼出接口,那么對應的回調函數就
被調用。有一個唯一識別此呼出接口的GUID。
·分層是網絡數據包的分類,根據需要與相應的分層交互。分層是一個容器,里面包含了0或一個過濾器,還可能包含一個或多個子層。每個分層有一個唯一的值標識
,內核態是64位的LUID來標識。用戶態用128位GUID來標識。
·子層是分層更小的一個划分,一個分層可以分為多個子層,每個子層有一個權重,權重越大,優先級越高。當數據達到分層時,子層的權值越大,越早獲取到數據。
·過濾器是存在WFP的分層中,是一套規則和動作的集合,規則指明了對那些數據包感興趣,過濾那些數據包。過濾器的規則被命中時,過濾器里面指定的動作會被
WFP執行。一個過濾器有一個或多個過濾條件,當全部成立時,才命中。使用時,必須知道過濾器被添加到內核過濾引擎的那一個分層中,不同分層中,可以過濾到不
同層次的網絡數據。統一層內,可存多個過濾器,不同過濾器有不同的權重,為了避免重復,可指定一個子層,只保證子層中的過濾器權重不重復就可以。過濾器關聯
子層后,按照權重值大到小匹配子層的過濾器。子層內,WFP也是按照過濾器的權值,大到小匹配過濾器的規則。過濾器可以關聯分層和子層,還可以關聯呼出接口。
在復雜的分析和處理的情況下,過濾器一般要關聯一個呼出接口,當命中時,執行與過濾器關聯的呼出接口內的回調函數
·呼出接口包含三個回調函數,notifyFn,classifyFn,flowDeleterFn。 classifyFn 規則被命中,執行此函數,獲取網絡數據包的相關信息,所得內容取決於所過
濾的分層,此接口還可以設置對網絡數據包的允許和攔截。notifyFnl當過濾器被添加或移除時,WFP會調用此函數,知道呼出接口關聯的過濾器的操作情況。
flowDeleterFn 當一個網絡數據流將要被終止時,WFP或調用此函數,而且將要終止的數據流被關聯了上下,才會被調用,用來清理別關聯的上下文。

WFP步驟
·定義一個或多個呼出接口,然后向過濾引擎注冊呼出接口。
·添加呼出接口道過濾引擎。
·設計一個或多個引擎,把子層添加到分層中
·設計過濾器,把呼出接口,子層,分層,過濾器關聯,向過濾引擎添加過濾器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM