WINDOWS網路包過濾技術

來源:互聯網
上載者:User
WINDOWS網路包過濾技術
              
(原文:http://www.ndis.com/papers/winpktfilter.htm)
//似乎是翻譯的#轉者註:)
//作  者:  sevencat (七貓)  //原文作者不詳#轉者注

一、user-mode網路包過濾
1、winsock分層service provider
參照Microsoft Platform SDK上有關文檔和例子
(http://www.microsoft.com/msdownload/platformsdk/sdkupdate/)
這裡有好幾個microsoft lsp 例子,最新(可能最bug-free)的經常在這裡能找到。需要
知道的是可以通過TDI調用核心TCPIP驅動,而且可以完全繞開WINSOCK,在大多數情況下這
不是一個問題。例如:QOS的實現可以在WINSOCK LSP上。
然而,這樣做的話,程式必須察看和操作每個包,而不能依靠WINSOCK LSP,他們要以一
種接近核心態的方法來實現。
2、win2000包過濾介面
  WIN2000包過濾介面提供了一種機制,這種機制允許使用者態程式或者服務指定一系列的
"過濾原則",這些過濾原則會被低層的TCPIP實現用來過濾包。這種過濾工主要是對IP原地
址、目標地址、連接埠號碼(或者連接埠號碼範圍)進行pass或者drop操作。
Windows Developer s Journal
用iphlpapi.dll進行包過濾》作者:Ton plooy,October,2000,Volume 11, Number 10

  WIN2000提供了一個較好對TCPIP的可程式化控制,其中包括包過濾。不幸的是,有關這
個新的API的文檔並不是很容易能找到。這篇文章向你示範了怎樣對特定IP地址或者特定T
CP連接埠的包進行阻塞的編程。
連結:www.wdj.com
上面這個例子的下載:ftp://ftp.wdj.com/pub/webzip/1110/plooy.zip
Hollis 的解決方案:
  HTS W2K IpHook例子示範了IP過濾和它的HOOK API,包含原檔案,而且是免費的,
需要HtsCpp執行階段程式庫(免費),:http://www.hollistech.com/
3、winsock替代DLL
  在使用WINSOCK LSP之前,唯一的辦法是用自己的DLL取代微軟的WINSOCK DLL,假如
實現順利的話,自己的DLL會接收使用者的WINSOCK調用請求,然後還可以調用原來的WINSOC
K DLL來處理。
  不過這樣的實現是比較費力的,其中有個困難就是微軟的WINSOCK DLL裡面經常有一
些未公開的內部使用的函數,一個WINSOCK代替DLL至少要處理其中的一些未公開函數。

  隨著WINDOWS系統結構的變化,有些方面得到了加強,比如系統檔案保護,這使得這種
技術變得不太可行。總的說來,使用WINSOCK DLL替換不是一個壞主意。(Xfilter就是用
的這種技術,原代碼可能在網上有流傳,我以前看到過的)
二、kernel-mode網路包過濾
1、Transport Data Interface (TDI)
  這主要是一個直接在核心TCPIP驅動上面的一層過濾驅動。在WINXP上TDI驅動是一種傳
統的NT風格的驅動,使用了基於IRP的API,這裡有兩種方法來實現。
A、使用核心模式服務的IoAttachDeviceXYZ函數族在TDI上實現一個過濾。
B、對TDI驅動IRP DISPATCH表進行過濾。
  IoAttachDeviceXYZ函數在許多WINNT驅動開發的書上提到。這兩種技術都需要對WINN
T驅動開發編程技術十分瞭解,對TDI函數也要相當的瞭解。
2、NDIS中介層(IM)
具體請看NDIS IM FAQ:http://www.pcausa.com/resources/ndisimfaq.htm
3、WIN2000 FILTER-HOOK
  請參照有關DDK文檔,系統中只能有一個活動的Filter-Hook存在,這點使這種技術的
使用有嚴重的限制。(平時所見的drvipflt就是用的這個)
4、WIN2000 FIREWALL-HOOK 
  Firewall-Hook Driver函數在文檔裡介紹得很少,而且在有些win2000版本中不可用。
請參照微軟有關文檔:http://msdn.microsoft.com/library/default.asp?url=/library
/en-us/network/hh/network/firewall_3wfb.asp
5、NDIS-HOOKING  (費爾防火牆就是用的這種技術吧,據我所知,雖然我沒看過原碼。

NDIS-Hooking驅動攔截或者叫"HOOK"一些由NDIS封裝程式匯出的函數。雖然從實現手段上
來說有些不正規,但一個有系統的NDIS-Hooking過濾會非常有效。
另外:NDIS-Hooking過濾驅動有下面的好處:
A、容易安裝(可以動態裝卸,不過有時候會出問題,裡面有些情況現在還未知。)
B、支援撥號-ppp適配器。
  Ndis-Hooking技術在98和ME系統下非常有效和實用。在這些平台上,DDK文檔和provi
ded services都能很有用的幫你HOOK由Ndis wrapper匯出的函數。
  Ndis-Hooking技術在NT,2000和XP上同樣有效和實用。這種技術很像核心模式的調試
器。文檔支援較少,而且基本上不會被WHQL認證。
PCAUSA提供了一套NDIS PIM驅動例子,這些例子能在現有的WIN平台上運行成功(從95到
XP)。地址:http://www.pcausa.com/ndispim/Default.htm

其他:
Network操作和進程資訊:
  有許多人想知道網路上的操作和WIN進程(就是應用程式啦)之間怎樣聯絡起來,舉例
來說,可能會想知道是哪個進程在一個特定的IP連接埠上發送或接收資料。
  先不考慮這種技術是否有用,或者是否可靠,我們認為核心模式TCPIP驅動上層的過濾
程式可以處理這個問題。而TCPIP驅動下層的過濾程式根本看不到進程資訊。特別要注意的
是有些網路服務操作產生一個新的進程attach到系統進程上的。在這種情況下進程資訊並
不能告訴我們原先是哪個進程產生的。特別是單獨在核心模式下的WIN服務(TDI客戶)
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.