編寫NDIS驅動,完全控制網絡卡收發報文

2021-06-22 01:29:49 字數 1089 閱讀 5055

在windows上面,利用網絡卡做自定義報文的收發,winpcap是唯一選擇,目前自己編寫驅動來實現相關功能的基本找不到。

winpcap對於接收的報文只是複製,並不阻斷報文向作業系統提交,因此還是影響了作業系統,導致作業系統時不時的發出一些報文來,而這些報文又可能會干擾我們的測試過程,為了突破這個限制,我重新實現了相關的驅動,做到了以下幾個功能:

1  和winpcap一樣出色的報文接收和傳送功能。函式介面類似,原來的**不用大修改。

2  接收後的報文不會轉交到作業系統。

3  作業系統發出的報文會被無情的丟棄。

4  應用層所有功能封裝成乙個dll,直接控制某個網絡卡呼叫相關介面函式即可。

5  應用層收到的資料也能夠儲存為pcap檔案格式,這樣便於使用wireshark來分析報文。

6  帶接收緩衝功能,防止應用層處理不及時而造成丟包。

通過這個驅動,被我們控制的網絡卡相當於從作業系統中脫離,完全被我們控制,這就成了乙個收發包的裝置了,可以用於報文測試模擬了,而軟體模擬的成本比硬體成本低很多,如果我們實現了乙個比較好的軟體,那麼可以節省很多購買測試裝置的錢。華為的tesgine都是可以被部分替換的。當然,軟體開發的成本也不小,需要對各種報文有經驗的開發人員,另外,網絡卡的吞吐率只有1g,和儀器裝置無法比,需要多個網絡卡的配合。但還是有很多這方面的需求的。

我們編寫自定義驅動,當然不需要重頭開始,windows的ddk中已經提供了樣例,其中,windowsxp版本,可以看winddk\7600.16385.1\src\network\ndis\passthru這個例子,採用ndis5,如果是win7的話,需要採用winddk\7600.16385.1\src\network\ndis\filter這個例子,這是基於ndis6的。在沒有ndis開發經驗之前,這幾個例子都相當的難懂,在有了經驗之後,發現這又是情理之中的**,一步一步按照微軟的驅動往下走即可。這兩個例子,都提供了報文阻斷的實現,但沒有提供和應用層互動的**,也沒有實現傳送報文的**,因此,需要在這兩個例子上,擴充出openfile,readfile,writefile,deviceiocontrol等相關的功能,並做好資料的緩衝拷貝機制。對於這部分**,可以參考winpcap的驅動實現過程。

由於**算公司的成果,這裡就不貼出來了。

NDIS6過濾驅動的編寫

ndis6是在windows vista及之後版本的windows引入的,這時ndis5的hook方式是無法使用的,msdn推薦的方式是使用過濾驅動,其實也可以使用intermediate 中間層驅動 下面談一下它們的利弊,還有一些原理性的東西 1.為什麼ndis6不動ndis5的hook 1.因為...

利用Passthru開發NDIS驅動的一點心得

最近看了不少資料,利用passthru例項完成了乙個ndis過濾驅動,解決了一些問題,也總結了一些經驗。當然,老手就不適用了,純給新手看的。2 收包的函式,有2個,是ptreceive和ptreceivepacket,分別對應不同的情況。如果網絡卡驅動通知上層,已經收到乙個完整的包,那麼就會呼叫pt...

inux下原生ndis驅動及qmi lib探索

據說只要核心版本大於等於3.4 即可使用原生高通 ndis 驅動,這讓我興奮了很久,終於不用自己寫驅動,改 bugubuntu14.04 版本,並將它安裝到了自己的 pc上。qiao qiao lenovo product cd lib modules 3.13.0 24 generic kerne...