过滤钩子驱动程序一(微软DDK文档,FLASHSKY翻译)
本章說明過濾鉤子驅(qū)動(dòng)程序. 一個(gè)過濾鉤子驅(qū)動(dòng)程序是用于操作系統(tǒng)中的一個(gè)IP過濾驅(qū)動(dòng)程序的上下文
中處理或過濾網(wǎng)絡(luò)包,過濾鉤子驅(qū)動(dòng)程序擴(kuò)展了IP過濾驅(qū)動(dòng)程序的功能。下面主題描述了過濾鉤子驅(qū)動(dòng)程序
的一些特性, 解釋怎樣建立過濾鉤子并列出實(shí)現(xiàn)一個(gè)過濾鉤子驅(qū)動(dòng)程序相關(guān)的輸入輸出控制代碼函數(shù)的參考
信息:
1.1 關(guān)于過濾鉤子驅(qū)動(dòng)程序
一個(gè)過濾鉤子驅(qū)動(dòng)程序是一個(gè)用于過濾網(wǎng)絡(luò)包的核心模式驅(qū)動(dòng)程序. 一個(gè)過濾鉤子驅(qū)動(dòng)程序擴(kuò)展系統(tǒng)提
供的IP過濾驅(qū)動(dòng)程序的功能。一個(gè)過濾鉤子驅(qū)動(dòng)程序僅僅只能安裝于2000及其之后的系統(tǒng)上。僅僅只有一個(gè)
過濾鉤子驅(qū)動(dòng)程序能被安裝在系統(tǒng)之上并且被IP過濾驅(qū)動(dòng)程序使用。如果一個(gè)過濾鉤子驅(qū)動(dòng)程序的指向用于
IP過濾驅(qū)動(dòng)程序的擴(kuò)展鉤子指針為空,那么他只能使用IP過濾驅(qū)動(dòng)程序注冊自己。一旦一個(gè)過濾鉤子驅(qū)動(dòng)程
序使用了IP過濾驅(qū)動(dòng)程序注冊自己,IP過濾程序給這個(gè)IP過濾程序的擴(kuò)展鉤子分派文件對象,用這種方法,
這個(gè)IP過濾驅(qū)動(dòng)程序確保自己只能接受和使用單個(gè)的過濾鉤子驅(qū)動(dòng)程序.
1.2 建立一個(gè)過濾鉤子驅(qū)動(dòng)程序
一個(gè)過濾鉤子驅(qū)動(dòng)程序在包過濾API不能滿足過濾網(wǎng)絡(luò)包時(shí)候來建立。用戶模式應(yīng)用程序使用這些API來
建立和管理系統(tǒng)在IP過濾驅(qū)動(dòng)程序中提供的輸出和輸入過濾器。更多API信息查看SDK。
一個(gè)過濾鉤子驅(qū)動(dòng)程序是在核心模式驅(qū)動(dòng)程序下開發(fā)的. 另外, 一個(gè)過濾鉤子驅(qū)動(dòng)程序完成一個(gè)過濾鉤
子回調(diào)函數(shù)并在系統(tǒng)提供的IP過濾驅(qū)動(dòng)程序中注冊這個(gè)回調(diào)函數(shù). 這個(gè)回調(diào)函數(shù)被看作一個(gè)過濾鉤子。這個(gè)
IP過濾驅(qū)動(dòng)程序以后使用這個(gè)過濾鉤子以決定怎樣處理到達(dá)和輸出的包.
下面的章節(jié)將說明怎樣建立一個(gè)過濾鉤子驅(qū)動(dòng)程序
1.2.1 建立過濾鉤子
一個(gè)過濾鉤子在執(zhí)行一個(gè)PacketFilterExtensionPtr類型的函數(shù)時(shí)被建立。
當(dāng)一個(gè)過濾鉤子驅(qū)動(dòng)程序在系統(tǒng)提供的IP過濾驅(qū)動(dòng)程序中注冊自己的過濾鉤子實(shí)體指針時(shí) ,這個(gè)過濾鉤子
驅(qū)動(dòng)程序給他的過濾鉤子提供符號(hào)地址. 因?yàn)橐粋€(gè)過濾鉤子驅(qū)動(dòng)程序提供這個(gè)地址, 而不是名字,這個(gè)過濾鉤
子可以選擇任何名字。當(dāng)然,好的程序習(xí)慣是用其基本的功能來命名這個(gè)過濾鉤子的名字。
一個(gè)過濾鉤子對到達(dá)與發(fā)出的包進(jìn)行特定的動(dòng)作,他將與IP過濾驅(qū)動(dòng)程序發(fā)送給過濾鉤子來檢查怎樣的包
將進(jìn)一步處理的信息與到達(dá)的特定信息做比較。在過濾鉤子檢查包以后,他將使用PF_FORWARD, PF_DROP, 或
PF_PASS返回響應(yīng)代碼給IP過濾驅(qū)動(dòng)程序怎樣處理的信息:
PF_FORWARD
規(guī)定給IP過濾驅(qū)動(dòng)程序馬上返回轉(zhuǎn)發(fā)響應(yīng)給IP棧. 對于本地包, IP轉(zhuǎn)發(fā)他們到棧頂. 如果包目標(biāo)地址為外
部機(jī)器并且路由允許, IP路由他們到對應(yīng)的路由.
PF_DROP
規(guī)定給IP過濾驅(qū)動(dòng)程序馬上返回drop響應(yīng)給IP棧. IP將drop這個(gè)包.
PF_PASS
規(guī)定給IP過濾驅(qū)動(dòng)程序過濾這個(gè)包并且返回這個(gè)結(jié)果響應(yīng)給IP棧. IP過濾驅(qū)動(dòng)程序怎樣處理這個(gè)過濾包決
定于他怎樣在Packet Filtering API中做的設(shè)置. 過濾鉤子如果他檢查到他不能處理的包但將允許IP過濾驅(qū)動(dòng)
程序過濾包的時(shí)候返回這個(gè)pass響應(yīng)。
1.2.2 過濾鉤子例子
本節(jié)顯示了一個(gè)簡單的過濾鉤子基于某幾個(gè)固定的包屬性來構(gòu)成forward和drop檢查. 這個(gè)過濾鉤子指定
drop TCP包而forward其他協(xié)議的包.
注意:如果特定IP地址或TCP/UDP端口的包必須被過濾,考慮使用包過濾API替代建立一個(gè)用戶模式的應(yīng)用
程序。這些API優(yōu)化了系統(tǒng)提供的IP過濾驅(qū)動(dòng)程序處理包而不需要在其上關(guān)聯(lián)一個(gè)過濾鉤子驅(qū)動(dòng)程序.
#define PROT_TCP 6
// Drop all TCP packets
PF_FORWARD_ACTION
DropTcpPackets(
unsigned char *PacketHeader,
unsigned char *Packet,
unsigned int PacketLength,
unsigned int RecvInterfaceIndex,
unsigned int SendInterfaceIndex,
IPAddr RecvLinkNextHop,
IPAddr SendLinkNextHop
)
{
if (PacketHeader-{
return PF_DROP;
}
return PF_FORWARD;
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3314
總結(jié)
以上是生活随笔為你收集整理的过滤钩子驱动程序一(微软DDK文档,FLASHSKY翻译)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双栈共享空间
- 下一篇: 《跟着王老师学Excel VBA》的笔记