Windows中Filter-Hook驅(qū)動(dòng)程序_第1頁
Windows中Filter-Hook驅(qū)動(dòng)程序_第2頁
Windows中Filter-Hook驅(qū)動(dòng)程序_第3頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Windows 中 Filter-Hook 驅(qū)動(dòng)程序在 Windows2000 和 Windows XP 中,System32drivers 目錄下的 ipfltdrv.sys 是Microsoft 提供的ip協(xié)議過濾驅(qū)動(dòng)程序。它允許用戶注冊(cè)自己的ip數(shù)據(jù)報(bào)處理函數(shù)。在MSDN中有關(guān)于這方面內(nèi)容的簡(jiǎn)短說明,位于Filter-Hook Driver Referenee 章節(jié)中。這一部分說明文檔論述了filter-hook驅(qū)程實(shí)現(xiàn)的回調(diào)函數(shù)和該驅(qū)程用以注冊(cè)回調(diào)函數(shù)的I/O控制碼?;卣{(diào)函數(shù)是這類驅(qū)程的主體部分。操作系統(tǒng)提供的ip過濾驅(qū)動(dòng)程序使用這個(gè)過濾鉤子來判斷ip數(shù)據(jù)包的處理方式。所注冊(cè)的過濾鉤子

2、是用PacketFilterExte nsio nPtr數(shù)據(jù)類型定義的。由于是使用函數(shù)的地址而不是函數(shù)的名字注冊(cè)過濾鉤子的入口點(diǎn),所以可以自由的為過濾鉤子函數(shù)命名。下面分別說明鉤子的數(shù)據(jù)結(jié)構(gòu)和注冊(cè)該鉤子的I/O控制碼。PacketFilterExte nsio nPtr下面是他的定義。typedef PF_FORWARD_ACTION (*PacketFilterExte nsio nPtr)(un sig ned char*PacketHeader,un sig ned char*Packet,un sig ned intPacketLe ngth.un sig ned intRecvI n

3、terfacel ndex,un sig ned intSen dI nterfacel ndex,IPAddrRecvLi nkNextHop,IPAddrSen dLi nkNextHop);ip數(shù)據(jù)包的命運(yùn),是繼續(xù)傳遞,該類型就是過濾鉤子的回調(diào)函數(shù),他決定所有傳過來的還是丟掉,或者允許ip過濾驅(qū)動(dòng)程序繼續(xù)處理。1. 參數(shù)PacketHeader指向該數(shù)據(jù)包的ip頭部的指針。Filter-Hook 驅(qū)動(dòng)程序可以將其轉(zhuǎn)換為IPHeader結(jié)構(gòu)指針類型。PacketFilter-Hook驅(qū)動(dòng)程序接收到的包含數(shù)據(jù)包信息的緩沖區(qū)指針。該緩沖區(qū)不包含PacketHeader 指針指向的ip協(xié)議頭。P

4、acketLe ngth以字節(jié)為單位的 Packet緩沖區(qū)的長(zhǎng)度。該長(zhǎng)度不包含ip協(xié)議頭的大小。Recvln terface In dex數(shù)據(jù)包到達(dá)的接口適配器的序號(hào)。Filter-Hook驅(qū)動(dòng)程序使用該序號(hào)訪問接收數(shù)據(jù)包的適配器。對(duì)于發(fā)送的數(shù)據(jù)包,該參數(shù)為INVALID_PF_IF_INDEX,并且參數(shù) RecvLi nkNextHop的值沒有意義。Sendin terface In dex數(shù)據(jù)包發(fā)送的接口適配器的序號(hào)。如果數(shù)據(jù)包需要通過該適配器路由,可以通過簡(jiǎn)單網(wǎng) 絡(luò)協(xié)議(SNMP )查詢路由表。對(duì)于接收的數(shù)據(jù)包,該參數(shù)為INVALID_PF_IF_INDEX,并且參數(shù) Se ndLi n

5、kNextHop的值沒有意義。RecvLi nkNextHop如果接口適配器是一個(gè)多點(diǎn)(綁定多個(gè)ip地址?)接口,該參數(shù)為適配器接收該數(shù)據(jù)包時(shí)的ip地址。否則,該參數(shù)為ZERO_PF_IP_ADDR。Se ndLi nkNextHop如果接口適配器是一個(gè)多點(diǎn)(綁定多個(gè)ip地址?)接口,該參數(shù)為適配器接發(fā)送數(shù)據(jù)包時(shí)的ip地址。否則,該參數(shù)為ZERO_PF_IP_ADDR。2. 返回值返回PF_FORWARD_ACTION 枚舉類型的值:PF_FORWARD該返回值指示ip過濾驅(qū)動(dòng)程序應(yīng)該立刻將數(shù)據(jù)包轉(zhuǎn)發(fā)到ip協(xié)議棧中。如果該數(shù)據(jù)包是本機(jī)需要的數(shù)據(jù)包,ip協(xié)議將其轉(zhuǎn)發(fā)給上層協(xié)議處理,如果不是到本機(jī)

6、的數(shù)據(jù)包,則ip將路由該數(shù)據(jù)包(如果此時(shí)路由功能被打開)。PF_DROP該返回值指示ip過濾驅(qū)動(dòng)程序?qū)⒘⒖滔騣p協(xié)議棧發(fā)出丟棄響應(yīng)。 這時(shí)ip協(xié)議將丟棄該 數(shù)據(jù)包。PF_PASS該返回值指示ip過濾驅(qū)動(dòng)程序處理該數(shù)據(jù)包,并將結(jié)果動(dòng)作返回到ip協(xié)議棧。如果Filter-Hook 驅(qū)動(dòng)程序認(rèn)為不需要處理該數(shù)據(jù)包,則應(yīng)該返回該值。3. 注釋如果Filter-Hook 驅(qū)動(dòng)程序返回PF_PASS,ip過濾驅(qū)動(dòng)程序?qū)⑻幚碓摂?shù)據(jù)包。在這種情況下,用戶態(tài)應(yīng)用程序可以通過 Packet Filteri ng API控制包的過濾動(dòng)作(iphlpapi.lib )。通過這些API函數(shù)可以創(chuàng)建和管理ip數(shù)據(jù)包的輸入

7、輸出。每一個(gè)ip適配器接口都可以有一 個(gè)或幾個(gè)與其相關(guān)聯(lián)的過濾器。過濾器可以包括ip地址,地址掩碼,端口號(hào),協(xié)議標(biāo)示符。更多的信息參考 Platform SDK 。IP過濾驅(qū)動(dòng)程序可以使用IPHeader結(jié)構(gòu)傳遞數(shù)據(jù)包的ip4. IPHeaderPacketHeader 參數(shù)指向的緩沖區(qū)通常被定義為IPHeader的細(xì)節(jié)信息。其定義如下:頭信息。結(jié)構(gòu)。該結(jié)構(gòu)提供了數(shù)據(jù)包UCHARiph_verle n;/ Version and len gthUCHAR iph_tos;/ Type of serviceUSHORTiph_le ngth;/ Total datagram len gthUSH

8、ORTiphd;/ Ide ntificati onUSHORT iph_offset;/ Flags, fragme nt offsetUCHAR iph_ttl;/ Time to liveUCHAR iph_protocol;/ Protocoltypedef struct iphdr USHORT iph_xsum;/ Header checksumULONG iph_src; / Source addressULONG iph_dest;/ Desti nation address iphdr;該結(jié)構(gòu)的成員的含義參看其后面的注釋。在Linux源程序中或者其他講解TCP/IP協(xié)議的書籍

9、中都有詳細(xì)的說明。IOCTL_PF_SET_EXTENSION_POINTERFilter-Hook 使用該I/O控制碼建立一個(gè)IRP,并將其提交給ip過濾驅(qū)動(dòng)程序。通常 filter-hook 驅(qū)動(dòng)程序使用 loBuildDeviceloCo ntrolRequest函數(shù)建立所需的 IRP。該控制碼向ip過濾驅(qū)動(dòng)程序注冊(cè)過濾鉤子回調(diào)函數(shù),當(dāng)有數(shù)據(jù)包發(fā)送或者接收時(shí),ip過濾驅(qū)動(dòng)程序就要調(diào)用這些回調(diào)函數(shù)。并且,該控制碼也用來從ip過濾驅(qū)動(dòng)程序中清除回調(diào)函數(shù)。函數(shù)的原型:為了方便對(duì)比,給出在loBuildDeviceloCo ntrolRequestPIRP loBuildDeviceloCo n

10、trolRequest(IN ULONG loCo ntrolCode,IN PDEVICE_OBJECT DeviceObject,IN PVOID In putBuffer OPTIONAL,IN ULONG In putBufferLe ngth,OUT PVOID OutputBuffer OPTIONAL,IN ULONG OutputBufferLe ngth,IN BOOLEAN In ternalDeviceloCo ntrol,IN PKEVENT Event,OUT PIO_STATUS_BLOCK loStatusBlock);在這里,使用loBuildDeviceloC

11、o ntrolRequest函數(shù)時(shí),其參數(shù)如下:plrp=loBuildDeviceloC on trolRequest(IOCTL_PF_SET_EXTENSION_POINTER, pT argetDeviceObject,&H ookl nfo,sizeof(PF_SET_EXTENSION_HOOK_INFO),NULL,0,FALSE,NULL,&IoStatusBlock);Hookl nfo為當(dāng)清除回調(diào)函其中,pTargetDeviceObject 指向ip過濾驅(qū)動(dòng)程序的設(shè)備對(duì)象;PF_SET_EXTENSION_HOOK_INFO 結(jié)構(gòu),該結(jié)構(gòu)中包含了回調(diào)函數(shù)的

12、地址。數(shù)時(shí),將該結(jié)構(gòu)中的函數(shù)指針賦值為NULL即可。Filter-hook驅(qū)動(dòng)程序通過調(diào)用loBuildDeviceloControlRequest函數(shù)建立 IRP,filter-hook驅(qū)動(dòng)程序?qū)⑺璧膮?shù)傳入。其中一個(gè)為ip過濾驅(qū)程的設(shè)備對(duì)象,filter-hook驅(qū)程可以使用loGetDeviceObjectPointer函數(shù)。這時(shí),要將 ip過濾驅(qū)程的設(shè)備對(duì)象的名字作為參數(shù)傳入,還有SYNCHRONIZE ,GENERIC_READ 和GENERIC_WRITE。這些參數(shù)表明這三種訪問權(quán)限是必需的。如果調(diào)用成功,IoGetDeviceObjectPoi nter返回目標(biāo)設(shè)備對(duì)象和文件對(duì)象。Ip過濾驅(qū)動(dòng)程序的設(shè)備對(duì)象的名字需要使用Deviceipfilterdriver 的Uni code 字符串。然后使用loCallDriver函數(shù)提交IRP。PF_SET_EXTENSION_HOOK_INFO結(jié)構(gòu)的定義如下,其中包含回調(diào)函數(shù)的指針:typedef struct _PF_SET_EXTENSION_HOOK_INFOPacketF

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論