1. 程式人生 > >winpcap原始碼c++版

winpcap原始碼c++版

   本來前一陣想做一個工具,分析網路包的,就拿了winpcap的原始碼簡單看了一下。winpcap的原理是通過ndis網路抽象層驅動,取得各種包的資訊。

   網路驅動程式介面規範(NDIS)是微軟為網路介面卡(NIC)的區域網驅動程式提供的一種標準應用程式介面(API)。NDIS 適用於伺服器或工作站。NDIS 標準支援計算機通過不同的通訊協議與網路相連,如:TCP/IP、IPX、NetBIOS、AppleTalk 等。NDIS 在資料鏈路層(第二層)的媒體控制層(MAC)執行其功能。

   主要內容就是一個npf.sys的驅動程式和winpcap通過deviceIoControl與該驅動進行互動,npf.sys驅動可以同過winpcap的原始碼編譯獲得,我拿到xp下進行了編譯,程式碼目前只看的一部分。然後就是winpcap庫程式碼,我把其中的winpcap,packet幾個庫合在一個工程中,同時讓工程的各個部分可以除錯,其實簡單的把各個c檔案合在一個工程中,我好像用了不到兩個半天,好像只要進行些簡單的調整,主要也是想抄一遍winpcap的程式碼,不過抄錯了不少地方,其中過濾器的演算法部分調了2天還是不能和源工程一樣,不得已複製了原始檔,把其中的部分c語言特有語法改了一下。

   過濾器演算法沒有詳細說明,到現在我還有些細節沒弄清,估計要好多時間才可以。附件是c++的工程,需要把npf.sys複製到system32/drivers資料夾下,然後可能要include一些winpcap的標頭檔案,工程就可以在window2005下執行。我用的唯一就是winpcapsrc,要是缺什麼自己核對一下^_^, 工程本身已經可以抓包,放在一個list變數裡面,不過不少地方需要改進,如果想簡單使用在那個基礎上新增類和方法即可以,可以獲得自己需要包的內容或是統計一些資訊.

   本來想把程式碼整理下的,其實似乎除了過濾器生成演算法,winpcap庫基本是呼叫packet庫的內容,不少函式可以簡單調整,不過現在沒什麼時間了。還有程式碼版權還是winpcap,我只是簡單抄寫。