freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

windows簡(jiǎn)單防火墻的設(shè)計(jì)與實(shí)現(xiàn)—計(jì)算機(jī)畢業(yè)設(shè)計(jì)-文庫(kù)吧資料

2024-12-07 10:37本頁(yè)面
  

【正文】 象取出數(shù)據(jù),安裝過濾條件 int nRet。 } } 安裝和卸載過濾條件 這項(xiàng)工作是通過向 IP 過濾驅(qū)動(dòng)發(fā)送控制代碼 ADD_FILTER 和 CLEAR_FILTER來實(shí)現(xiàn)的。 } void CMainFrame::OnFileStop() // 停止過濾 { if(m_bStarted) { // 通知 IP 過濾驅(qū)動(dòng)停止過濾 m_pFilterDrvIoControl(STOP_IP_HOOK, NULL, 0, NULL, 0)。 return。以下是用戶單擊開始和停止按鈕時(shí)程序調(diào)用的函數(shù): void CMainFrame::OnFileStart() // 開始過濾 { if(m_bStarted) return。 if(m_pIPFltDrv != NULL) delete m_pIPFltDrv。 } CMainFrame::~CMainFrame() 第 15 頁(yè) 共 20 頁(yè) { if(m_bStarted) m_pFilterDrvIoControl(STOP_IP_HOOK, NULL, 0, NULL, 0)。 exit(1)。 m_pFilterDrv = new CDriver(szPath, DrvFltIp)。 ::GetFullPathName(, 256, szPath, amp。 // 啟動(dòng) IP 過濾鉤子驅(qū)動(dòng) char szPath[256]。 // 指示是否啟動(dòng) ?? }; // 文件 CMainFrame::CMainFrame() { // 確保 IP 過濾驅(qū)動(dòng)啟動(dòng)(否則怎樣為它安裝鉤子?) m_pIPFltDrv = new CDriver(, IpFltDrv)。 // IP 過濾驅(qū)動(dòng)指針 CDriver* m_pFilterDrv。 CRuleDlg:從 CDialog 派生,過濾規(guī)則相關(guān) 核心代碼 CMainFram 類主要是加載 IP 過濾驅(qū)動(dòng)、 IP 過濾鉤子驅(qū)動(dòng)和處理菜單命令。 第 14 頁(yè) 共 20 頁(yè) 視圖類又從 CWnd 類派生。 ② 變量盡量不使用縮寫,個(gè)別較長(zhǎng)的單詞或已成習(xí)慣縮寫如下 Initialize Init 初始化 Dialog Dlg 對(duì)話框 Application App 應(yīng)用程序 ③ 自定義的全局變量用 m_開頭,過程變量則不用 變量的前綴用變量類 型的第一個(gè)字母標(biāo)志變量類型。在“動(dòng)作”一欄里,用戶可以選者“丟棄”或者“放行”來決定數(shù)據(jù)包如何處理。如源 ip 地址、源端口號(hào),目的 ip 地址、目的端口號(hào)等內(nèi)容。 圖 4. 主程序界面 當(dāng)用戶單擊“添加 規(guī)則 ”時(shí)彈出 添加 規(guī)則 窗口 , 如圖 5。用戶可以單擊“ 開始過濾”和“停止過濾”來決定數(shù)據(jù)過濾的開始與停止。首先建立一個(gè) MFC 的界面工程。用戶單擊添加過濾規(guī)則 彈出添加規(guī)則對(duì)話框,為用戶提供添加過濾規(guī)則的輸入界面,單擊刪除時(shí)則實(shí)現(xiàn)刪除用戶選定的過濾規(guī)則;當(dāng)用戶單擊安裝規(guī)則和卸載規(guī)則時(shí),則分別發(fā)送控制代碼 ADD_FILTER 和 CLEAR_FILTER 來實(shí)現(xiàn)過濾規(guī)則的加載或者卸載。過濾函數(shù)實(shí)現(xiàn)大致流程如下: 第 11 頁(yè) 共 20 頁(yè) 圖 5 客戶端應(yīng)用程序 用戶程序的核心實(shí)現(xiàn)就是使用 CDriver 類向驅(qū)動(dòng)程序發(fā)送幾個(gè)設(shè)備控制代碼( START_IP_HOOK(安裝過濾鉤子 )、 STOP_IP_HOOK(清除過濾鉤子)、 ADD_FILTER(安裝過濾規(guī)則)、 CLEAR_FILTER(卸載過濾規(guī)則 ))。具體的過濾函數(shù)實(shí)際上就是過濾鉤子回調(diào)函數(shù),當(dāng)有數(shù)據(jù)包的發(fā)送或者接收時(shí)鉤子回調(diào)函數(shù)將會(huì)被調(diào)用。由于是鏈表結(jié)構(gòu)存儲(chǔ),所以清除過濾列表時(shí),只需要遍歷 g_pHeader 指向的鏈表,依次釋放添加規(guī)則時(shí)申請(qǐng)的內(nèi)存即可。 //定義列表首地址 向過濾列表中添加規(guī)則時(shí),首先申請(qǐng)一塊 CFilterList 結(jié)構(gòu)大小的內(nèi)存,然后用正確的參數(shù)來填充這塊內(nèi)存,最后連接到過濾列表中。 //過濾規(guī)則 CFilterList *pNext。在鉤子回調(diào)函數(shù)中,當(dāng)有數(shù)據(jù)包需要通過時(shí)得遍歷這個(gè)列表。 下面是典型過濾器鉤子驅(qū)動(dòng)的備控制例程處理兩種 I/O 控制請(qǐng)求 : SetHook IOCTL 表示注冊(cè)一個(gè)過濾器鉤子 ; ClearHook IOCTL 示清除以前注冊(cè)的過濾器鉤子 。 為了獲得 I/O 控制請(qǐng)求 , 過濾器鉤子驅(qū)動(dòng)程序的設(shè)備控制例程必須調(diào)用IoGetCurrentIrpStackIocation 函數(shù) , 在調(diào)用中 , 設(shè)備控制例程把一個(gè) IRP 指針傳遞給IoGetCurrentIrpStackIocation 函數(shù) , 然后設(shè)備控制例程決定哪一個(gè) I/O 控制請(qǐng)求已經(jīng)收到并且做相應(yīng)的處理 。這個(gè) Dispatch 例程處理發(fā)來的 I/O 控制請(qǐng)求 , 在 DriverEntry 入口函數(shù)中為這個(gè) Dispatch 例程設(shè)置和輸出入口點(diǎn) 。 成員 ExtensionPointer 是指向 hook 回調(diào)函數(shù)的指針 .通過該結(jié)構(gòu)完成向 IP 過濾驅(qū)動(dòng)程序注冊(cè) hook 函數(shù) .如果 ExtensionPointer 為 NULL,則從 IP 過濾驅(qū)動(dòng)程序中清除回調(diào)函數(shù)。 PF_SET_EXTENSION_HOOK_INFO 結(jié)構(gòu)的定義如下,其包含回調(diào)函數(shù)的指針: Typedef struct_PF_SET_EXTENSION_HOOK_INFO { PacketFilterExtensionPtr ExtensionPointer。在這次調(diào)用中,過濾器鉤子驅(qū)動(dòng)傳遞了一個(gè)指向 IP 過濾驅(qū)動(dòng)設(shè)備對(duì)象的指針,也就是先前已經(jīng)創(chuàng)建的IRP 指針。當(dāng)有數(shù)據(jù)包發(fā)送或接收時(shí), IP 過濾驅(qū)動(dòng)程序就要調(diào)用這些回調(diào)函數(shù)。該控制碼也用來從 IP 過濾驅(qū)動(dòng)程序中清除回調(diào)函數(shù),為了清除過濾器鉤子,這個(gè)結(jié)構(gòu)包括了空( NULL)值。 在這次調(diào)用中,過濾器鉤子驅(qū)動(dòng)傳遞了指定 IOCTL_PF_SET_EXTENSION_POINTER值的參數(shù)、設(shè)備對(duì)象指針以及包含 PF_SET_EXTENSION_HOOK_INFO 結(jié)構(gòu)的 緩沖區(qū)。 調(diào)用此函數(shù)時(shí),為 ObjectName 參數(shù)傳遞 IP 過濾驅(qū)動(dòng)名稱“ \Device\IPFILTERDRIVER”,為 DesireAccess 參數(shù)傳遞 FILE_ALL_ACCESS 過濾器鉤子驅(qū)動(dòng)程序使用 PF_SET_EXTENSION_POINTER 控制碼建立一個(gè) IRP,并將其提交給 IP 過濾鉤子驅(qū)動(dòng)程序,通常 filterhook 驅(qū) 動(dòng) 程 序 調(diào) 用IoBuildDeviceIoControlRequest 函數(shù)建立所需 IRP,該控制碼向 IP 過濾器驅(qū)動(dòng)程序注冊(cè)過濾鉤子回調(diào)函數(shù)。 //指定這個(gè)對(duì)象要求訪問的權(quán)限 OUT PFILE_OBJECT *FileObject。 NTSTATUS IoGetDrivceObjectPointer( IN PUNICODE_STRING ObjectName。為了記錄和清除鉤子回調(diào)函數(shù),過濾器鉤子驅(qū)動(dòng)必須首先用設(shè)備對(duì)象的指針為 IP 過 濾 器 驅(qū) 動(dòng) 和IOCTL_PF_SET_EXTENSION_POINTER 創(chuàng)建一個(gè) IRP,然后,過濾器鉤子驅(qū)動(dòng)把這個(gè) IRP提交給 IP 過濾器驅(qū)動(dòng),過濾器鉤子驅(qū)動(dòng)設(shè)置或清除鉤子回歸函數(shù)的過程描述是:為了獲得IP 過濾器 驅(qū) 動(dòng)的設(shè)備對(duì)象指針,過濾器鉤子驅(qū)動(dòng)需要 調(diào)用函數(shù) IoGetDeviceObjectPointer。過濾器鉤子驅(qū)動(dòng)程序設(shè)置了過濾器鉤子回調(diào)函數(shù),并通知 IP 過濾器驅(qū) 動(dòng) 為每個(gè)傳入或者傳出的 IP 數(shù)據(jù)包調(diào)用這個(gè)鉤子回調(diào)函數(shù)。 PF PASS 表小 IP 過濾驅(qū)動(dòng)程序處理該數(shù)據(jù)包,并將結(jié)果動(dòng)作回復(fù)給 IP 協(xié)議棧. IP過濾器驅(qū)動(dòng)如何過濾數(shù)據(jù)包由它本身和包過濾 API 接口的設(shè)置方式來決定;如果過濾器鉤子認(rèn)為自己不需要處理該數(shù)據(jù)包,而是讓 IP 過濾器驅(qū)動(dòng)過濾包,則應(yīng)該返回該 PF_PASS。 PF DROP 表示 IP 過濾驅(qū)動(dòng)程序?qū)⒘⒖滔?IP 協(xié)議棧發(fā)出丟棄響應(yīng), IP 協(xié)議將丟棄該數(shù)據(jù)包。 這 3 種回復(fù)響應(yīng)代碼所代表的含義描述如下: 第 8 頁(yè) 共 20 頁(yè) 首先是把數(shù)據(jù)包的特定信息和 IP 過濾器驅(qū)動(dòng)提供給過濾器鉤子的信息加以比較,以此決定數(shù)據(jù)包下一步如何被處理 。 不過,一般情況下要根據(jù)過濾器鉤子函數(shù)的基本功能來命名。 在過濾器鉤子驅(qū)動(dòng)通過系統(tǒng)提供的 IP 過濾器驅(qū)動(dòng)注冊(cè)其過濾鉤子( filter hook )的入口點(diǎn)時(shí),已給出了過濾器鉤子的符號(hào)(可變)地址 。 //封包長(zhǎng)度 USHORT checksum。 //源端口號(hào) USHORT destinationPort。 //校驗(yàn)和 USHORT urgenPointer。 //標(biāo)志 USHORT windows。 //ack 序號(hào) UCHAR dataoffset。 //目的端口 ULONG sequenceNumber。 TCP 頭 : typedef stuct_TCPHeader { USHORT sourcePort。 //目的 IP 地址 }IPPacket。 //效驗(yàn)和 ULONG ipSoruce。 //生存時(shí)間 UCHAR ipProtocol。 //封包標(biāo)適,唯一 標(biāo)識(shí) 發(fā)送的每一個(gè)數(shù)據(jù)報(bào) USHORY ipFlags。 //服務(wù)類型 USHORT ipLength。 Typedef struct IPHearder { UCHAR iphverLen。以下是該數(shù)據(jù)類型原型: tyfedef PF_FORWARD_ACTION (*PacketFilterExtensionPtr)( IN unsigned char *PacketHeader, //封包的 IP 頭指針 IN unsigned char *Packet, //具體封包數(shù)據(jù),不包括頭指針 IN unsigned int PacketLength, //具體封包數(shù)據(jù)大小,不包含頭指針 IN ubsigned int RecvInterfaceTndex, //接收數(shù)據(jù)的接口適配器編號(hào) IN unsigned int SendInterfaceIndex , //發(fā)送數(shù)據(jù)的接口適配器編號(hào) IN IPAddr RecvLinkNextHop, //接收數(shù)據(jù)包的適配器 IP 地址 IN IPAddr SendLinkNextHop //發(fā)送數(shù)據(jù)包的適配器 IP 地址 )。內(nèi)核中的過濾器鉤子驅(qū)動(dòng)將本機(jī)進(jìn)出的所有封包都傳入到我們的虛擬設(shè)備中,按照我們提供的過濾規(guī)則進(jìn)行處理。由于是使用函數(shù)的地址而不是函數(shù)的名字注冊(cè)過濾鉤子的入口點(diǎn),所以可以自由的為過濾鉤子函數(shù)命名。操作系統(tǒng)提供的 ip 過濾驅(qū)動(dòng)程序使用這個(gè)過濾鉤子來判斷 ip 數(shù)據(jù)包的處理方式。這一部分說明文檔論述了 filterhook 驅(qū)程實(shí)現(xiàn)的回調(diào)函數(shù)和該驅(qū)程用以注冊(cè)回調(diào)函數(shù)的 i/o 控制碼。 它允許用戶注冊(cè)自己的 ip 數(shù)據(jù)報(bào)處理函數(shù)。 從 Windows 2020 開始, IpFilterDrive 成為系統(tǒng)自帶的一個(gè)驅(qū)動(dòng)。它是一種 KMD(Kernel Mode Driver 內(nèi)核模式驅(qū)動(dòng) ),與 IpFilterDrive 相配合。主要利用 過濾鉤子驅(qū)動(dòng) 模塊應(yīng)用輸出接口提供的四個(gè) IOCTL 來實(shí)現(xiàn)相應(yīng)功能: START_IP_HOOK(注冊(cè)過濾函數(shù) );STOP_IP_HOOK(撤消過濾函數(shù)); ADD_FILTER(安裝新的過濾規(guī)則) CLEAR_FILTER(清除所有規(guī)則) 4 過濾鉤子 驅(qū)動(dòng)的實(shí)現(xiàn) Filter_Hook Driver 概述 在 Windows2020 DDK 中, Microsoft 聲稱 包括了新的網(wǎng)絡(luò)驅(qū)動(dòng)類型 FilterHook Driver。 程序模塊 該模塊主要就是用戶所看到的程序界面,是用戶和防火墻進(jìn)行對(duì)話的對(duì)象。 圖 利用在 Microsoft Windows 2020 DDK 中介紹的 FilterHook Drive 來實(shí)現(xiàn)對(duì)所有進(jìn)出接口的數(shù)據(jù)進(jìn)行過濾。做折中比較后,在用驅(qū)動(dòng)程序攔截?cái)?shù)據(jù)包的方法中選擇了一個(gè)最簡(jiǎn)單的方法:使用 Win2020 DDK 中提供的 FilterHook Driver 來實(shí)現(xiàn)數(shù)據(jù)包的過濾 。 雖然 用戶態(tài)下實(shí)現(xiàn) 數(shù)據(jù)包捕獲 比較容易,但其攔截?cái)?shù)據(jù)包有一些局限性,一個(gè)最大的缺點(diǎn)就是只能
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1