已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
畢業(yè)設(shè)計(jì)(論文)畢業(yè)設(shè)計(jì)(論文) 題目:題目: 一個(gè)包過(guò)濾型防火墻軟件的開發(fā)一個(gè)包過(guò)濾型防火墻軟件的開發(fā) 學(xué)生姓名:學(xué)生姓名: 學(xué)學(xué) 號(hào):號(hào): 班班 級(jí)級(jí): 專專 業(yè):業(yè): 指導(dǎo)教師:指導(dǎo)教師: 2011 年年 6 月月 一個(gè)包過(guò)濾型防火墻軟件的開發(fā)一個(gè)包過(guò)濾型防火墻軟件的開發(fā) 學(xué)學(xué)生生姓姓名名 : 學(xué)學(xué) 號(hào):號(hào): 班班 級(jí):級(jí): 所所在在院院 (系系): 指指導(dǎo)導(dǎo)教教師師 : 完完成成日日期期 : 2010 年年 6 月月 一個(gè)包過(guò)濾型個(gè)人防火墻軟件的開發(fā) 摘 要 隨著病毒、木馬、黑客攻擊等問題的出現(xiàn),網(wǎng)絡(luò)安全形勢(shì)日漸嚴(yán)峻,網(wǎng)絡(luò) 安全產(chǎn)品也被人們重視起來(lái)。防火墻作為最早出現(xiàn)的網(wǎng)絡(luò)安全產(chǎn)品和使用量最 大的安全產(chǎn)品,也受到用戶和研發(fā)機(jī)構(gòu)的青睞。防火墻放置在外部網(wǎng)絡(luò)與計(jì)算 機(jī)之間作為隔離設(shè)備,可以識(shí)別并屏蔽非法請(qǐng)求,有效防止跨越權(quán)限的數(shù)據(jù)訪 問。 本文使用 VC+ 6.0 作為開發(fā)工具實(shí)現(xiàn)了一個(gè)包過(guò)濾型個(gè)人防火墻軟件。系 統(tǒng)主要包括兩大模塊,一是核心模塊設(shè)計(jì),即 DLL 工程,實(shí)現(xiàn)了封包截獲、管 制動(dòng)作和協(xié)議封包的解析任務(wù)。其中實(shí)現(xiàn)網(wǎng)絡(luò)封包截獲功能主要是利用 Winsock 2 SPI 技術(shù),此后再利用控管規(guī)則對(duì)過(guò)往封包進(jìn)行合法性檢查和過(guò)濾, 方法是首先利用 Winsock 2 SPI 技術(shù)建立 winsock 鉤子,用它來(lái)截獲 winsock 的 調(diào)用,然后作出相應(yīng)動(dòng)作處理,動(dòng)作處理需通過(guò)控管規(guī)則的檢查后,確定 socket 連接是否允許通過(guò),而控管規(guī)則由用戶層設(shè)置;二是用戶模塊設(shè)計(jì),即 EXE 工程,實(shí)現(xiàn)用戶界面和負(fù)責(zé)與 DLL 模塊的通信,提供了 3 個(gè)主要界面, 即封包監(jiān)視、控管規(guī)則、控管規(guī)則設(shè)置。最后通過(guò)測(cè)試和應(yīng)用,基本達(dá)到了預(yù) 期的設(shè)計(jì),解決了終端用戶的網(wǎng)絡(luò)連接安全問題。 關(guān)鍵詞: 網(wǎng)絡(luò)安全;網(wǎng)絡(luò)協(xié)議封包;個(gè)人防火墻;動(dòng)態(tài)鏈接庫(kù);Winsock 2 SPI; The Design of A Personal Firewall Based on Packet Filter Abstract With computer viruses, Trojans, hacker attacks and other problems, the network security situation is increasingly grim, network security products are also paid attention. Network firewall appeared as the first security products and be used most widely, are concerned by the user and R Second, the user module design, the EXE project, responsible for achieving the user interface and DLL The communications module provides three main interfaces, namely, packet monitoring, control rules, control rules set. After testing and application, the design achieve the expected to solve the security problems of users network connection. Key words: Network Security;Network Protocol Packets;Personal Firewall;DLL; Winsock 2 SPI; 目錄目錄 1 引言 .1 1.1課題背景與意義.1 1.2課題目標(biāo).1 1.3課題的研究方法.1 2 WINSOCK 2 SPI 編程技術(shù).3 2.1WINSOCK 2 SPI 基礎(chǔ).3 2.2傳輸服務(wù)提供者.3 2.3開發(fā)平臺(tái)與開發(fā)工具.4 3 系統(tǒng)總體分析與設(shè)計(jì) .5 3.1系統(tǒng)功能定義.5 3.2模塊劃分.5 3.2.1 模塊劃分原則.5 3.2.2 模塊結(jié)構(gòu).6 3.2.3 模塊接口定義.7 3.3程序工作流程圖.8 3.4控管規(guī)則文件結(jié)構(gòu)設(shè)計(jì).9 3.4.1 控管規(guī)則文件需要存儲(chǔ)的內(nèi)容.9 3.4.2 控管規(guī)則文件結(jié)構(gòu).11 3.5界面設(shè)計(jì).11 3.5.1 制定界面風(fēng)格.11 3.5.2 界面設(shè)計(jì)文檔.12 3.6編碼規(guī)則.16 4 核心功能的實(shí)現(xiàn) .17 4.1封包截獲.17 4.2訪問控管.21 4.2.1 對(duì)服務(wù)提供者函數(shù)做管制的函數(shù).21 4.2.2 封包處理函數(shù).22 4.2.3 管制函數(shù).23 4.2.4 設(shè)置函數(shù).27 5 系統(tǒng)測(cè)試 .28 5.1 測(cè)試方法概述.28 5.2 測(cè)試用例及測(cè)試結(jié)果.28 6 結(jié)束語(yǔ).34 6.1 總結(jié).34 6.2 展望.34 參考文獻(xiàn).35 致 謝.37 1 引言 1.1課題背景與意義 隨著網(wǎng)絡(luò)在各領(lǐng)域應(yīng)用的越來(lái)越廣泛,網(wǎng)絡(luò)安全問題得到了更多的關(guān)注。 計(jì)算機(jī)病毒攻擊可以導(dǎo)致電腦系統(tǒng)癱瘓;而木馬和黑客攻擊可致使重要信息被 竊取,造成不可估量的損失。所以人們開始尋求如何能在電腦和網(wǎng)絡(luò)間添加一 種可靠保護(hù)體系。防火墻就此應(yīng)運(yùn)而生。顧名思義,防火墻能夠在計(jì)算機(jī)和網(wǎng) 絡(luò)間形成一道過(guò)濾屏障,保證被認(rèn)可的行為順利執(zhí)行,而危險(xiǎn)行為則被屏蔽。 從而很大程度上增加了網(wǎng)絡(luò)的安全性。 1.2課題目標(biāo) 現(xiàn)在防火墻的花樣與種類繁多,讓人眼花繚亂。但是防火墻的主要功能是 防止外部網(wǎng)絡(luò)的攻擊以達(dá)到保護(hù)主機(jī)的目的。哪些未知的網(wǎng)絡(luò) IP 可能對(duì)主機(jī)產(chǎn) 生攻擊可能是未可知的,只有試驗(yàn)過(guò)才知道。所以現(xiàn)在防火墻一般與防病毒軟 件配合使用。這樣才能安全的保護(hù)主機(jī)。 實(shí)現(xiàn)的主要的核心功能如下定義: (1) 根據(jù)應(yīng)用程序訪問規(guī)則可對(duì)應(yīng)用程序連網(wǎng)動(dòng)作進(jìn)行過(guò)濾; (2) 對(duì)應(yīng)用程序訪問規(guī)則具有自學(xué)習(xí)功能; (3) 可實(shí)時(shí)監(jiān)控、監(jiān)視網(wǎng)絡(luò)活動(dòng)。 1.3課題的研究方法 本課題由兩大模塊構(gòu)成,分別為 DLL 模塊和 EXE 模塊。 首先利用 Winsock 2 SPI 技術(shù)建立 winsock 鉤子用來(lái)截獲 winsock 調(diào)用從而 攔截 TCP/IP 封包,并做相應(yīng)處理。然后設(shè)置控管規(guī)則訪問控制,通過(guò)控管規(guī)則 的檢查認(rèn)證,確定 socket 連接是否允許通過(guò)。在此之后是 TCP/IP 的封包分析, 利用 TIP/IP 的封包結(jié)構(gòu)分析截獲的數(shù)據(jù),提取需要的數(shù)據(jù)。這些封裝在 DLL 里 面【1】。 EXE 模塊主要是用戶頁(yè)面的制作。這里介紹與 DLL 模塊通信的地方。EXE 中與 DLL 直接通信的小模塊主要有兩個(gè)。一個(gè)是完成應(yīng)用程序初始化的類 CPropertyApp,它繼承自 CWinApp,是 EXE 的入口,其實(shí)里面封裝了 WinMain 函數(shù);另一個(gè)是主窗口模塊 CMainFrame,這個(gè)主窗口并不是 EXE 顯示出來(lái)的 那個(gè)屬性頁(yè)窗口,而是一個(gè)隱藏的窗口,它繼承自 CMrameWnd,是一個(gè)無(wú)模 式窗口,他隱藏顯示,充當(dāng)接受機(jī),用來(lái)接受 DLL 及其他模塊發(fā)送過(guò)來(lái)的消息, 然后對(duì)消息進(jìn)行相應(yīng)的處理。 每一個(gè)連網(wǎng)的程序連網(wǎng)之前都會(huì)建立一個(gè) Socket 連接。這時(shí)鉤子程序就會(huì) 起作用,把截獲的底層服務(wù)進(jìn)行“過(guò)濾” ,及先調(diào)用自定義的函數(shù)再轉(zhuǎn)給下層服 務(wù)提供者函數(shù)【2】。本文將這一層實(shí)現(xiàn)封包過(guò)濾的,把規(guī)則與功能寫到這一層。 本層的實(shí)現(xiàn)是本課題的核心。 2 WINSOCK 2 SPI 編程技術(shù)編程技術(shù) Winsock 2 是 Windows Sockets 的 2.0 版本,在此之前的版本是 1.1。與 1.1 版本相比,2.0 版本引入了一種新的叫做 SPI 的編程接口。利用這種技術(shù)可以在 Socket 中插入一曾層,從而可以完成諸如擴(kuò)展 TCP/IP 協(xié)議棧,網(wǎng)絡(luò)安全控制等 功能,所以這是一個(gè)非常強(qiáng)大而且有用的接口,下面介紹這種編程技術(shù)。 2.1 WINSOCK 2 SPI 基礎(chǔ) Winsock 是為上層應(yīng)用程序提供的一種標(biāo)準(zhǔn)網(wǎng)絡(luò)接口,上層應(yīng)用程序不用 關(guān)心 Winsock 實(shí)現(xiàn)的細(xì)節(jié),它為上層應(yīng)用程序提供透明的服務(wù)。 Winsock 2 引入的一個(gè)新的功能就是打破服務(wù)提供者的透明,讓開發(fā)者可 以編寫自己的服務(wù)提供者接口程序,即 SPI 程序。SPI 以動(dòng)態(tài)鏈接庫(kù)的形式存 在,它工作在應(yīng)用層,為上層 API 調(diào)用接口函數(shù)【3】。Winsock 2 是一個(gè)接口, 不是一個(gè)協(xié)議。作為接口,它只能發(fā)現(xiàn)和利用底層傳輸協(xié)議完成通信。 自己編寫的 SPI 程序安裝到系統(tǒng)之后,所有的 Winsock 請(qǐng)求都會(huì)發(fā)送到這 個(gè)程序并由它完成網(wǎng)絡(luò)調(diào)用。由于系統(tǒng)提供的 SPI 已經(jīng)可以完成網(wǎng)絡(luò)傳輸功能, 所以自己編寫的 SPI 沒有必要重新編寫這部分功能。一般可以直接調(diào)用系統(tǒng)函 數(shù)完成網(wǎng)絡(luò)傳輸,這樣工作的效果就是“鉤子程序。 Winsock 2 SPI 除了有完成網(wǎng)絡(luò)傳輸?shù)膫鬏敺?wù)提供者,還有提供友好名稱 服務(wù)的名字空間服務(wù)提供者。傳輸服務(wù)提供者能夠提供建立通信、傳輸數(shù)據(jù)、 流量控制和錯(cuò)誤控制等服務(wù)。名字空間服務(wù)提供者把一個(gè)網(wǎng)絡(luò)協(xié)議的地址屬性 和一個(gè)或多個(gè)用戶友好名稱關(guān)聯(lián)起來(lái),這樣可以起用與協(xié)議無(wú)關(guān)的名字解析方 案。 2.2 傳輸服務(wù)提供者 傳輸服務(wù)提供者又分為基礎(chǔ)服務(wù)提供者和分層服務(wù)提供者。基礎(chǔ)服務(wù)提供 者和分層服務(wù)提供者都開放相同的 SPI 接口,所不同的是基礎(chǔ)服務(wù)提供者位于 提供者的最底層。所以編寫基礎(chǔ)服務(wù)提供者和分層服務(wù)提供者基本相同。但安 裝是卻需要將基礎(chǔ)服務(wù)提供者安裝在服務(wù)提供者加載順序鏈的最底端,而分層 服務(wù)提供者則根據(jù)需要分布在順序鏈的中間。 2.3 開發(fā)平臺(tái)與開發(fā)工具 開發(fā)平臺(tái)如題說(shuō)明,以 Windows 平臺(tái)為主,重點(diǎn)討論開發(fā)工具的選擇。 根據(jù)不同的工程選擇不同的開發(fā)工具,可以有效地提高工作效率。不同的 開發(fā)工具各有各的優(yōu)點(diǎn)同時(shí)又各有各的不足,在開發(fā)中要揚(yáng)長(zhǎng)避短。 目前常用的 Windows 開發(fā)工具有 VS 5.0/6.0、VS.net(包括 VB、BC、VFP、VJ、C#等一組開發(fā)工具) 、delphi、C+ Builder,JBuilder、PB 等【4】。 在這些開發(fā)工具里面,VFP 和 PB 一般用來(lái)專門開發(fā)數(shù)據(jù)庫(kù)系統(tǒng),它們具 有靈活的數(shù)據(jù)庫(kù)接口。 VB 和 Delphi 既可以方便地做出復(fù)雜的數(shù)據(jù)庫(kù)管理系統(tǒng),又能輕松地完成 操作系統(tǒng)級(jí)的任務(wù)。最優(yōu)秀的是很容易做出漂亮的界面。 VC 和 Borland C+著重于系統(tǒng)編程,它們開放接口較多,也最為靈活,而 且編譯出的程序體積較小,所以比較適合做系統(tǒng)工具類軟件。缺點(diǎn)是短時(shí)間不 容易掌握。其中 Borland 使用的 VCL 類庫(kù)是為 Delphi 準(zhǔn)備的,并不是真正用 C+實(shí)現(xiàn)的。 VJ、Jbuilder 和 Java 語(yǔ)言主要面向互聯(lián)網(wǎng)應(yīng)用。最大的優(yōu)勢(shì)是跨平臺(tái)。 本課題為防火墻軟件,較多的使用系統(tǒng)接口,而且界面簡(jiǎn)單。另外,防火 墻主要傳播渠道是互聯(lián)網(wǎng),這就要求體積應(yīng)盡量的小,安裝盡量方便。所以選 擇 VC 為開發(fā)工具。 3 系統(tǒng)總體分析與設(shè)計(jì) 3.1 系統(tǒng)功能定義 本設(shè)計(jì)實(shí)現(xiàn)的具體功能描述如下: (1) 封包監(jiān)視 提供封包監(jiān)視頁(yè)面。 提供清空監(jiān)視列表,停止/開始監(jiān)視及停止/開始滾動(dòng)功能。 (2) 控管規(guī)則設(shè)置 手工添加,刪除及修改控管規(guī)則。 自學(xué)習(xí)添加控管規(guī)則。 控管規(guī)則中目的網(wǎng)絡(luò) IP 地址段的設(shè)置。 提供控管規(guī)則設(shè)置頁(yè)面。 (3) 封包過(guò)濾 DLL 給出設(shè)置工作模式和設(shè)置控管規(guī)則的接口函數(shù)。工作模式分為 3 種形式:放行所有,拒絕所有和過(guò)濾。 DLL 根據(jù)工作模式和控管規(guī)則對(duì)過(guò)往封包進(jìn)行過(guò)濾。 DLL 將通過(guò)的網(wǎng)絡(luò)封包通知 EXE 取走 。 3.2 模塊劃分 3.2.1 模塊劃分原則 模塊劃分是系統(tǒng)分析中非常重要的一部分,下面是模塊劃分時(shí)的基本原則。 (1) 獨(dú)立性:讓模塊直接內(nèi)的關(guān)系減到最少。理想的狀態(tài)就是模塊之間沒 有關(guān)系,但這種情況不符合現(xiàn)實(shí)。既然是同一個(gè)工程,模塊之間自然都會(huì)存在 一定的聯(lián)系,只要想辦法讓模塊之間的關(guān)系盡量簡(jiǎn)單就可以了。 (2) 接口簡(jiǎn)單化:讓模塊之間的接口盡量單純、簡(jiǎn)單、易用。即讓公用函 數(shù)和公用變量盡量地少。 (3) 分層處理:吸取 Windows 操作系統(tǒng)對(duì)模塊做分層處理的經(jīng)驗(yàn)。建立一 些中間模塊,讓兩端的模塊來(lái)完成相互調(diào)用的透明化。 (4) 容易合并:容易將劃分的模塊進(jìn)行合并。例如將一個(gè)工程的各個(gè)功能 模塊分別設(shè)計(jì)成可執(zhí)行文件,然后用一個(gè)總模塊將這些模塊關(guān)聯(lián)起來(lái)組成一個(gè) 工程。這種情況下,對(duì)模塊獨(dú)立性要求較高,模塊之間幾乎沒有任何關(guān)系。 (5) 可測(cè)試性:盡量使每個(gè)模塊都可以單獨(dú)進(jìn)行測(cè)試6。 上面的 5 條是參考原則,既然是參考原則就不會(huì)完全執(zhí)行,完全按照一個(gè) 教條去執(zhí)行真的很困難。只要在做模塊劃分的時(shí)候能經(jīng)常記起這些原則,然后 稍加注意就 OK 了。另外,在這 5 條原則中,第一條是根本,能把這一條做好, 下面的一些就容易實(shí)現(xiàn)了。在做模塊劃分時(shí)一定要始終貫穿獨(dú)立性的思想。 3.2.2 模塊結(jié)構(gòu) 根據(jù) 3.1 節(jié)的功能定義和 3.2 節(jié)的工作流程圖,需要對(duì)模塊做進(jìn)一步細(xì)化, 得出更詳細(xì)的模塊結(jié)構(gòu)。這些模塊結(jié)構(gòu)是編程的藍(lán)本,在編寫代碼的過(guò)程中, 就要以這些結(jié)構(gòu)為指導(dǎo)。 (1) 模塊 1.1:用戶界面,3.5 節(jié)詳細(xì)說(shuō)明。 (2) 模塊 1.2:EXE 的安裝模塊, 。建立 CXInstall 類,C+源文件 Install.h 和 Install.cpp。安裝函數(shù) InstallProvider 和卸載函數(shù) RemoveProvider (3) 模塊 1.3:EXE 讀寫控管規(guī)則模塊,建立 CAclFile 類,C+源文件 File.h 和 File.cpp。讀控管規(guī)則文件 ReadAcl,保存控管規(guī)則文件 SaveAcl,增加 一條控管規(guī)則 AddAcl 和刪除一條控管規(guī)則 DelAcl。 (4) 模塊 1.4:EXE 設(shè)置 DLL 的控管規(guī)則模塊,設(shè)置控管規(guī)則單獨(dú)的函數(shù), 調(diào)用模塊 1.3 讀寫控管規(guī)則模塊得到控管規(guī)則數(shù)據(jù),調(diào)用 DLL 的函數(shù) FloControl 設(shè)置 DLL 的控管規(guī)則。 (5) 模塊 1.5:EXE 設(shè)置 DLL 的工作模式,設(shè)置工作模式單獨(dú)的函數(shù),調(diào) 用模塊 1.3 讀寫控管規(guī)則模塊得到控管規(guī)則數(shù)據(jù),調(diào)用 DLL 的函數(shù) FloControl 設(shè)置 DLL 的工作模式。 (6) 模塊 2.1:DLL 封包過(guò)濾模塊,有分為 3 塊,2.1.1 一組 Winsock 2SPI 鉤子函數(shù) C+源文件 TcpipDog.h 和 TcpipDog.cpp;模塊 2.1.2 根據(jù)控管規(guī)則判 斷是否可以通行的類 CCheckAcl,C+源文件 CheckAcl.h 和 CheckAcl.cpp;模 塊 2.1.3 對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行分析的類 CProtocolInfo,C+源文件 ProtocolInfo.h 和 ProtocolInfo.cpp。 模塊 2.1.1:服務(wù)提供者函數(shù)模塊,入口函數(shù) WSPSartup,發(fā)送詢問消 息到 EXE,由 EXE 提供詢問界面函數(shù) QueryAccess。截獲的 8 個(gè)服務(wù)提供者函 數(shù)。設(shè)置工作模式、控管規(guī)則等設(shè)備工作接口函數(shù) FloControl。 模塊 2.1.2:訪問控管模塊,通過(guò)檢查工作模式和控管規(guī)則得到是否放 行的函數(shù) GerAccessInfo。 模塊 2.1.3:協(xié)議解析模塊,得到協(xié)議信息處理函數(shù) GetProtocolInfo (7) 模塊 2.2:DLL 更改控管規(guī)則模塊,設(shè)置 DLL 控管規(guī)則數(shù)據(jù) SetAcl, 設(shè)置控管規(guī)則 m_Aclfile,設(shè)置工作模式 m_iWorkMode。 (8) 模塊 2.3:DLL 更改工作模式模塊,設(shè)置 DLL 工作模式函數(shù) SetWorkMode。 3.2.3 模塊接口定義 模塊之間接口有 3 種方式: (1) 函數(shù)接口 函數(shù)接口是最常用而且獨(dú)立性和封裝性最好的接口方式7。函數(shù)之間通過(guò) 參數(shù)傳遞進(jìn)行模塊之間的通信,處理過(guò)程保持相互獨(dú)立,函數(shù)處理完成把處理 結(jié)果返回到調(diào)用模塊。如果每個(gè)函數(shù)都有單獨(dú)的接口,那么,函數(shù)多了,接口 也就多了,也就越來(lái)越復(fù)雜了。C+利用類的餓概念解決這個(gè)問題。類可以將 一組函數(shù)和變量封裝起來(lái),這樣就將許許多多的函數(shù)轉(zhuǎn)化成一個(gè)對(duì)象的形式。 外部模塊使用這個(gè)類的實(shí)例來(lái)引用封裝在里面的成員函數(shù)個(gè)變量。把功能相似、 相關(guān)的函數(shù)分成一組,然后封裝在一起,使接口間的關(guān)系清晰了很多。類的成 員函數(shù)和成員變量有公有和私有之分。對(duì)于公有函數(shù)和變量,外部模塊可以直 接調(diào)用;對(duì)于私有函數(shù)和變量,外部模塊則不能直接調(diào)用。利用這種特性,可 以把一些只在類里面使用的函數(shù)定義為私有函數(shù);把外部模塊需要直接調(diào)用的 函數(shù)定義為公有函數(shù)。類似于 DLL 的導(dǎo)出函數(shù)(Export) ,這樣,模塊之間的 直接接觸就會(huì)進(jìn)一步減小,獨(dú)立性更進(jìn)一步增加。 (2) 全局變量接口 全局變量接口是一種不提倡的方式。雖然它使用起來(lái)確實(shí)很過(guò)癮。全局變 量多了非常容易出問題。任何地方都可能會(huì)對(duì)全局變量進(jìn)行賦值,變量的可控 性大大降低,不知道什么時(shí)候變量的值就被莫名其妙地改掉了。當(dāng)然,只要不 被那些模塊執(zhí)行的先后順序和循環(huán)語(yǔ)句弄昏頭,還是可以使用全局變量的。雖 然不提倡使用,但是有些地方使用全局變量與是不可避免的,而且有時(shí)候可以 減少很多麻煩。使用全局變量的時(shí)候需要注意一點(diǎn),讀取變量的多少和位置對(duì) 程序穩(wěn)定性的影響并不很大,關(guān)鍵是盡量讓賦值的地方單一,改變變量的次數(shù) 和位置應(yīng)盡量得到控制。 (3) Windows 消息接口 Windows 消息接口是一種特殊的接口形式,它是基于 Windows 操作系統(tǒng)的 消息機(jī)制8。這種接口形式適合于應(yīng)用程序之間。應(yīng)用程序是相對(duì)獨(dú)立的模塊, 如果這兩個(gè)模塊需要通信,則消息接口就是一種理想型的選擇。這種接口類似 于函數(shù)接口,只不過(guò)通過(guò)操作系統(tǒng)的消息機(jī)制來(lái)中轉(zhuǎn)一下。Windows 消息接口 也是一種接口方式,特別是 DLL 和 EXE 之間經(jīng)常用到。在 DLL 與 EXE 之間 通信使用消息是一種優(yōu)勢(shì),多個(gè)應(yīng)用程序雖然調(diào)用同一個(gè) DLL,但是它們都擁 有獨(dú)立的模塊副本。這時(shí)候如果這些模塊副本都需要讓同一個(gè)應(yīng)用程序做一件 事時(shí),就不好處理,因?yàn)?DLL 的重要性和應(yīng)用程序保護(hù)機(jī)制導(dǎo)致這些模塊副本 無(wú)法直接調(diào)用同一個(gè)應(yīng)用程序的執(zhí)行模塊。這時(shí)候就可以通過(guò)消息的方式來(lái)解 決。發(fā)送消息是基于窗口句柄的,只要得到這個(gè)窗口句柄,不同的 DLL 副本都 向同一個(gè)窗口句柄發(fā)送消息,自然所有的消息都可以被同一個(gè)應(yīng)用程序接收9。 以上 3 種接口方式以函數(shù)接口為優(yōu)先進(jìn)行考慮,以增強(qiáng)模塊的獨(dú)立性和可 讀性。 3.3 程序工作流程圖 Winsock 2 SPI 是一個(gè) DLL 程序,它工作在 API 和 DRIVER 之間,為上層 應(yīng)用程序提供服務(wù)【5】。EXE 與 DLL 構(gòu)成軟件的主體,也是編寫軟件的主要工 作。流程圖如圖 3.1 所示。 模塊1.1.1 控管規(guī)則 輸入界面接口 模塊1.1.2 封包監(jiān) 視界面接口 模塊1.3 讀寫控管 規(guī)則 模塊1.4 設(shè)置控管 規(guī)則 模塊1.5 設(shè)置工作 模式 控管規(guī)則文件 (.cfg) 模塊2.2 控 管規(guī)則 模塊2.3 工 作模式 用戶界面(EXE) 模塊1.2 安裝 Winsock 2SPI (DLL) 模塊 2.1 封 包 過(guò) 濾 模塊1.1 用戶界面接口 圖 3.1 防火墻工作流程圖 3.4 控管規(guī)則文件結(jié)構(gòu)設(shè)計(jì) 控管規(guī)則文件用來(lái)存儲(chǔ)控管規(guī)則數(shù)據(jù),命名為 acl.cfg;該數(shù)據(jù)文件為二進(jìn) 制文件。 3.4.1 控管規(guī)則文件需要存儲(chǔ)的內(nèi)容 控管規(guī)則文件需要存儲(chǔ)的內(nèi)容如下: (1) 系統(tǒng)設(shè)置 (2) 控管設(shè)置 (3) 控管規(guī)則附加數(shù)據(jù),授權(quán)訪問的遠(yuǎn)端網(wǎng)絡(luò) IP 地址記錄 a.控管規(guī)則記錄結(jié)構(gòu)說(shuō)明 (1) 規(guī)則編號(hào)字段是控管規(guī)則的唯一性編號(hào)。保留字段,沒有使用。 (2) 應(yīng)用程序名稱及路徑字段用來(lái)保持應(yīng)用程序的名稱和路徑。 (3) 遠(yuǎn)端網(wǎng)絡(luò)類型,數(shù)值的含義如下。 0:表示所有網(wǎng)絡(luò) 1:局域網(wǎng) 2:約束的網(wǎng)絡(luò)(自定義) 3:信任的網(wǎng)絡(luò)(自定義) 4:自定義的網(wǎng)絡(luò)(自定義) 模塊 1.1 用戶界面接口 (4) 管制動(dòng)作,數(shù)值的含義如下。 0:放行 1:拒絕 (5) 進(jìn)出方向,數(shù)值的含義如下。 0:出 1:入 2:雙向 (6) 服務(wù)類型,數(shù)值的含義如下。 0:全部 1:TCP(端口為任意,可編輯) 2:UDP(端口為任意,可編輯) 3:FTP(端口為 21,不可編輯) 4:TELNET(端口為 23,不可編輯) 5:HTTP(端口為任意,可編輯) 6:NNTP(端口為 119,不可編輯) 7:POP3(端口為 110,不可編輯) 8:SMTP(端口為 25,不可編輯) (7) 服務(wù)端口,數(shù)值的含義如下。 0:表示全部 其他值:表示端口值 b.授權(quán)訪問的遠(yuǎn)端 IP 地址記錄結(jié)構(gòu) 授權(quán)訪問的遠(yuǎn)端網(wǎng)絡(luò) IP 地址結(jié)構(gòu)如表 1 所示。 表 1 授權(quán)訪問的遠(yuǎn)端網(wǎng)絡(luò) IP 地址段記錄結(jié)構(gòu) 字段 類型 長(zhǎng)度 開始 IP 無(wú)符號(hào)長(zhǎng)整型 4 結(jié)束 IP無(wú)符號(hào)長(zhǎng)整型 4 3.4.2 控管規(guī)則文件結(jié)構(gòu) 根據(jù)需要存儲(chǔ)的內(nèi)容將控管規(guī)則文件劃分為 3 段。 文件頭用來(lái)存儲(chǔ)系統(tǒng)設(shè)置,IP 地址范圍記錄和控管規(guī)則記錄的地址偏移量 及其他信息10;IP 地址范圍記錄存儲(chǔ)區(qū)用來(lái)存儲(chǔ) IP 地址范圍記錄;控管規(guī)則 記錄存儲(chǔ)區(qū)用來(lái)存儲(chǔ)控管規(guī)則記錄。 a. 控管規(guī)則結(jié)構(gòu) 控管規(guī)則結(jié)構(gòu)如表 2 所示。 表 2 控管規(guī)則記錄結(jié)構(gòu)表 08162432404856 控管規(guī)則編號(hào)應(yīng)用程序路徑和名稱 遠(yuǎn)端網(wǎng)絡(luò)動(dòng)作方向服務(wù)類型端口 b. IP 地址結(jié)構(gòu) IP 地址段記錄結(jié)構(gòu)如表 3 所示。 表 3 IP 地址段記錄結(jié)構(gòu)表 08162432404856 開始 IP 地址結(jié)束 IP 地址 開始 IP 地址結(jié)束 IP 地址 3.5 界面設(shè)計(jì) 3.5.1 制定界面風(fēng)格 界面上反映的功能有:封包監(jiān)視、控管規(guī)則設(shè)置。這是兩個(gè)平行的功能, 所以選用 Windows 的屬性頁(yè)。 3.5.2 界面設(shè)計(jì)文檔 界面設(shè)計(jì)如下所示。 a. 封包監(jiān)視界面 封包監(jiān)視界面用來(lái)顯示截獲的網(wǎng)絡(luò)封包。每個(gè)網(wǎng)絡(luò)封包的具體內(nèi)容根據(jù)實(shí) 際需要而定。如圖 3.2。 圖 3.2 封包監(jiān)視界面 封包的字段有: (1) 應(yīng)用程序路徑和名稱 (2) 管制動(dòng)作(放行或拒絕) (3) 訪問起始/結(jié)束時(shí)間 (4) 使用網(wǎng)絡(luò)協(xié)議 (5) 進(jìn)/出流量 (6) 本地和遠(yuǎn)端 IP 地址/端口 (7) 備注信息 封包監(jiān)視界面實(shí)時(shí)接收 DLL 發(fā)送過(guò)來(lái)的網(wǎng)絡(luò)封包并立刻顯示。 在封包監(jiān)視界面上設(shè)計(jì)了幾個(gè)附加按鈕。 “停止/開始滾動(dòng)”用來(lái)設(shè)置監(jiān)視 列表是否自動(dòng)滾動(dòng);“開始/停止監(jiān)視”用來(lái)設(shè)置是否實(shí)時(shí)監(jiān)視;“清除”按鈕 用來(lái)清除當(dāng)前列表。這些功能按鈕方面操作。 b. 控管規(guī)則界面 控管規(guī)則界面用來(lái)顯示和設(shè)置控管規(guī)則(如圖 3.3) 。需要說(shuō)明的是,應(yīng)用 程序設(shè)置的優(yōu)先級(jí)高于控管規(guī)則設(shè)置,只是在應(yīng)用程序設(shè)置為詢問時(shí),下面的 控管規(guī)則設(shè)置才有效。 圖 3.3 控管規(guī)則界面 控管規(guī)則的設(shè)計(jì)目的是為了制訂對(duì)網(wǎng)絡(luò)訪問的控制,所以控管規(guī)則的字段 可以決定防火墻防范的嚴(yán)密性和靈活程度??毓芤?guī)則的記錄結(jié)構(gòu)為: 應(yīng)用程序 遠(yuǎn)端網(wǎng)絡(luò) 管制動(dòng)作 進(jìn)出方向 協(xié)議類型 使用端口 控管規(guī)則界面給出了“增加” 、 “刪除” 、 “修改”3 個(gè)功能按鈕用來(lái)對(duì)控管 規(guī)則進(jìn)行不同的操作。其中選擇增加和修改時(shí)都會(huì)彈出控管規(guī)則設(shè)置界面。 (1) 控管規(guī)則設(shè)置界面 控管規(guī)則設(shè)置界面是用來(lái)設(shè)置控管規(guī)則的各個(gè)字段(如圖 3.4) 。在“應(yīng)用 程序”欄輸入或選擇要進(jìn)行控管的應(yīng)用程序的完整路徑和文件名。 “遠(yuǎn)端網(wǎng)絡(luò)”用 IP 地址范圍表示,用來(lái)定義網(wǎng)絡(luò)類型的 IP 地址范圍。本 軟件工劃分為 5 個(gè)類型:所有網(wǎng)絡(luò)、局域網(wǎng)、受約束的網(wǎng)絡(luò)、信任的網(wǎng)絡(luò)和自 定義網(wǎng)絡(luò)。 “動(dòng)作”用來(lái)確定符合這一條控管規(guī)則的網(wǎng)絡(luò)訪問動(dòng)作是放行還是拒絕。 “方向”用來(lái)確定這一條控管規(guī)則適合于網(wǎng)絡(luò)訪問的連接方向。本機(jī)向遠(yuǎn) 端服務(wù)器發(fā)出連接請(qǐng)求就是出;遠(yuǎn)端主機(jī)向本機(jī)發(fā)出連接請(qǐng)求則為進(jìn)。 “類型”是控管規(guī)則約定的協(xié)議類型。 “端口”是協(xié)議所使用的端口。 圖 3.4 控管規(guī)則設(shè)置界面 (2) 網(wǎng)絡(luò)設(shè)置界面 網(wǎng)絡(luò)設(shè)置界面用來(lái)對(duì)各種網(wǎng)絡(luò)類型的 IP 地址段進(jìn)行設(shè)置(如圖 3.5) ,在上 節(jié)有關(guān)于遠(yuǎn)端網(wǎng)絡(luò)類型的介紹。在這個(gè)界面上提供對(duì) IP 地址段的增加、修改和 刪除功能 圖 3.5 網(wǎng)絡(luò)設(shè)置界面 3.6 編碼規(guī)則 變量命名規(guī)則如下: (1) 變量采用代表中文意思的英文單詞或單詞組合。 (2) 變量一般不用縮寫,用英文單詞全稱。較長(zhǎng)的更為習(xí)慣的縮寫。 (3) 自定義全局變量用 m_開頭。 (4) 自定義過(guò)程變量不用 m_開頭。 (5) 變量的前綴用變量類型的第一個(gè)字母標(biāo)志變量類型。如,指針類型在 前面多加一個(gè)字母 P。 (6) 如果是對(duì)象,前綴用對(duì)象的名稱,第一個(gè)字母大寫。 (7) 變量中有多個(gè)單詞時(shí),單詞的第一個(gè)字母大寫,其余用小寫。 (8) 有了自己的編碼規(guī)則后,不會(huì)出現(xiàn)自己的弄不清楚自己定義的函數(shù)之 類的是什么意思。不知道函數(shù)是干什么的。以至于思維混亂。 4 核心功能的實(shí)現(xiàn) 本課題的核心功能實(shí)現(xiàn)封裝在 DLL 里面。下面分析 DLL 的主要內(nèi)容。 4.1 封包截獲 BOOL WINAPI DllMain 是 DLL 的入口函數(shù),系統(tǒng)調(diào)用時(shí)的標(biāo)準(zhǔn)接口12。 做一些初始化工作。主要工作是得到調(diào)用這個(gè)程序的進(jìn)程路徑和名稱并設(shè)置 DLL 調(diào)用次數(shù)的計(jì)數(shù)器。 WSPStartup 是 Windows Sockets 應(yīng)用程序調(diào)用 SPI 的初始化函數(shù)。是服務(wù) 提供者的標(biāo)準(zhǔn)入口函數(shù)。這里的工作是根據(jù) lpProtocolInfo 找出已經(jīng)被替換的服 務(wù)提供者路徑,然后加載,并利用被替換服務(wù)提供者的 WSPStartup 得到 30 個(gè) 服務(wù)函數(shù)指針。需要先保存這些函數(shù)指針,然后將 lpProcTable 結(jié)構(gòu)中的 30 個(gè) 服務(wù)函數(shù)指針都設(shè)置成自己的。這樣,相應(yīng)的函數(shù)請(qǐng)求會(huì)首先經(jīng)過(guò)我們自己的 函數(shù),然后用這些函數(shù)可以做適當(dāng)?shù)奶幚恚僬{(diào)用原來(lái)的,將請(qǐng)求轉(zhuǎn)發(fā),完成 整個(gè)通信。 int WSPAPI WSPStartup( WORDwVersionRequested, LPWSPDATAlpWSPData, LPWSAPROTOCOL_INFOWlpProtocolInfo, WSPUPCALLTABLEupcallTable, LPWSPPROC_TABLElpProcTable ) ODS(_T(WSPStartup.); if(!m_CheckAcl.m_bIsWin9x TCHARsLibraryPath512; LPWSPSTARTUP WSPStartupFunc = NULL; HMODULEhLibraryHandle= NULL; INT ErrorCode = 0; if(!GetHookProvider(lpProtocolInfo,sLibraryPath)| (hLibraryHandle =LoadLibrary(sLibraryPath)=NULL|(WSPStartupFunc=(LPWSPSTARTUP)GetPr ocAddress(hLibraryHandle, WSPStartup) = NULL) return WSAEPROVIDERFAILEDINIT; if(ErrorCode=WSPStartupFunc(wVersionRequested,lpWSPData,lpProtocolInfo, upcallTable, lpProcTable) != ERROR_SUCCESS) return ErrorCode; if( !lpProcTable-lpWSPAccept | !lpProcTable-lpWSPAddressToString | !lpProcTable-lpWSPAsyncSelect | !lpProcTable-lpWSPBind | !lpProcTable-lpWSPCancelBlockingCall | !lpProcTable-lpWSPCleanup | !lpProcTable-lpWSPCloseSocket | !lpProcTable-lpWSPConnect | !lpProcTable-lpWSPDuplicateSocket | !lpProcTable-lpWSPEnumNetworkEvents | !lpProcTable-lpWSPEventSelect | !lpProcTable-lpWSPGetOverlappedResult | !lpProcTable-lpWSPGetPeerName | !lpProcTable-lpWSPGetSockName | !lpProcTable-lpWSPGetSockOpt | !lpProcTable-lpWSPGetQOSByName | !lpProcTable-lpWSPIoctl | !lpProcTable-lpWSPJoinLeaf | !lpProcTable-lpWSPListen | !lpProcTable-lpWSPRecv | !lpProcTable-lpWSPRecvDisconnect | !lpProcTable-lpWSPRecvFrom | !lpProcTable-lpWSPSelect | !lpProcTable-lpWSPSend | !lpProcTable-lpWSPSendDisconnect | !lpProcTable-lpWSPSendTo | !lpProcTable-lpWSPSetSockOpt | !lpProcTable-lpWSPShutdown | !lpProcTable-lpWSPSocket | !lpProcTable-lpWSPStringToAddress ) return WSAEINVALIDPROCTABLE; EnterCriticalSection( NextProcTable = *lpProcTable; lpProcTable-lpWSPSocket= WSPSocket; lpProcTable-lpWSPCloseSocket= WSPCloseSocket; lpProcTable-lpWSPConnect= WSPConnect; lpProcTable-lpWSPAccept= WSPAccept; lpProcTable-lpWSPSend= WSPSend; lpProcTable-lpWSPSendTo= WSPSendTo; lpProcTable-lpWSPRecv= WSPRecv; lpProcTable-lpWSPRecvFrom= WSPRecvFrom; /以上是我們截獲并要用自己定義的函數(shù)。 LeaveCriticalSection( return 0; XfIoControl 是供 EXE 調(diào)用的。用來(lái)設(shè)置 DLL 的配置信息和得到 DLL 的反 饋信息,這個(gè)函數(shù)為 EXE 提供接口,EXE 通過(guò)這個(gè)函數(shù)來(lái)設(shè)置工作模式,或 得到截獲的網(wǎng)絡(luò)封包信息。 QueryAccess 是在應(yīng)用程序提交連網(wǎng)請(qǐng)求時(shí),如果發(fā)現(xiàn)控管規(guī)則中沒有關(guān)于 這個(gè)應(yīng)用程序的控管規(guī)則,并且工作模式為詢問,則向擁護(hù)發(fā)出詢問,是否讓 這個(gè)程序通行。 GetHookProvider 用來(lái)讀取注冊(cè)表得到系統(tǒng)的 SPI 的 DLL 路徑和文件信息。 這個(gè)信息是安裝時(shí)自己寫入的。根據(jù) pProtocolInfo 信息取出自己保存的、已經(jīng) 被本程序替換的服務(wù)提供者路徑。 GetRightEntryIdItem 是供 GetHookProvider()調(diào)用的擴(kuò)展函數(shù),用來(lái)得到 保存系統(tǒng)服務(wù)提供者路徑的注冊(cè)表鍵名。及得到已經(jīng)被本程序替換的服務(wù)提供 者的 dwCatalogEntryId。 XfShutdown 調(diào)用系統(tǒng)服務(wù)提供者函數(shù) WSPShutdown,關(guān)閉一個(gè) Socket 連 接。并設(shè)置相應(yīng)的錯(cuò)誤代碼。 截獲的服務(wù)提供者函數(shù): 過(guò)濾 WSPSocket。WSPSocket 是用來(lái)創(chuàng)建 Socket 的函數(shù)【15】,首先調(diào)用底 層函數(shù)得到新創(chuàng)建的 Socket,然后設(shè)置新建 Socket 的協(xié)議信息,并調(diào)用自定義 函數(shù) CheckSocket 為這個(gè) Socket 建立 Session,然后保存相應(yīng)的信息。 過(guò)濾 WSPCloseSocket。轉(zhuǎn)發(fā)之前首先調(diào)用自定義函數(shù) CheckCloseSocket 刪 除相應(yīng)的 Session。 過(guò)濾 WSPConnect。當(dāng)一個(gè) Socket 建立連接后調(diào)用這個(gè)函數(shù),轉(zhuǎn)發(fā)之前先 調(diào)用訪問控制函數(shù) CheckConnect,檢查是否放行。如果不放行,返回錯(cuò)誤;如 果放行,調(diào)用底層 WSPConnect 函數(shù)進(jìn)行轉(zhuǎn)發(fā)。 過(guò)濾 WSPAccept。用來(lái)接受一個(gè)連接請(qǐng)求。首先調(diào)用底層函數(shù),然后對(duì)連 接的合法性進(jìn)行檢查,如果不允許通過(guò),關(guān)閉這個(gè)連接 過(guò)濾 WSPSend。這個(gè)函數(shù)用來(lái)發(fā)送面向連接的數(shù)據(jù),先檢查是否允許通過(guò), 然后進(jìn)行轉(zhuǎn)發(fā)。 過(guò)濾 WSPSendTo。這個(gè)函數(shù)用來(lái)發(fā)送面向無(wú)連接的數(shù)據(jù),先檢查是否允許 通過(guò),然后進(jìn)行轉(zhuǎn)發(fā)。 過(guò)濾 WSPRecv。這個(gè)函數(shù)用來(lái)接收面向連接的數(shù)據(jù)。首先判斷是不是重疊 操作并且設(shè)置回調(diào)函數(shù)。如果設(shè)置,則用自定義函數(shù) AddOverlapped 保存參數(shù) 信息,然后用自己的回調(diào)函數(shù)代替原來(lái)的并轉(zhuǎn)發(fā)。轉(zhuǎn)發(fā)后根據(jù)返回值判斷操作 是否成功,如果成功,則調(diào)用控管函數(shù)對(duì)操作的合法性進(jìn)行判斷;否則直接返 回。 過(guò)濾 WSPRecvFrom。這個(gè)函數(shù)用來(lái)接收面向連接的數(shù)據(jù)。首先判斷是不是 重疊操作并且設(shè)置回調(diào)函數(shù)。如果設(shè)置,則用自定義函數(shù) AddOverlapped 保存 參數(shù)信息,然后用自己的回調(diào)函數(shù)代替原來(lái)的并轉(zhuǎn)發(fā)。轉(zhuǎn)發(fā)后根據(jù)返回值判斷 操作是否成功,如果成功,則調(diào)用控管函數(shù)對(duì)操作的合法性進(jìn)行判斷;否則直 接返回。 4.2訪問控管 編寫一個(gè) CCheckAcl。它封裝了一組對(duì)訪問權(quán)限進(jìn)行控制的函數(shù)。訪問權(quán) 限主要是由控管規(guī)則設(shè)置決定。另外還封裝了一組網(wǎng)絡(luò)封包操作函數(shù)。下面是 一些主要函數(shù)及相應(yīng)代碼。 4.2.1 對(duì)服務(wù)提供者函數(shù)做管制的函數(shù) CheckStartup:應(yīng)用程序連網(wǎng)前的訪問控制權(quán)限。在服務(wù)提供者函數(shù) WSPStartup 中對(duì)訪問權(quán)限進(jìn)行控制。WSPStartup 是 Wi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高端住宅小區(qū)物業(yè)保安勞務(wù)服務(wù)合同范本
- 2025年度購(gòu)房貸款個(gè)人信息保護(hù)合同
- 2025年度游樂園項(xiàng)目場(chǎng)地使用權(quán)及設(shè)施維護(hù)合作協(xié)議
- 2025年度水田承包與農(nóng)業(yè)品牌建設(shè)合作協(xié)議
- 二零二五年度白蟻防治服務(wù)合同-城市綠化帶白蟻防治
- 二零二五年度游艇俱樂部船舶租賃代理合同
- 二零二五年度餐飲企業(yè)員工勞動(dòng)合同法律服務(wù)與保障
- 2025年度互聯(lián)網(wǎng)簽訂方協(xié)議詳細(xì)流程與網(wǎng)絡(luò)安全責(zé)任追究協(xié)議
- 二零二五年度二手電腦及配件交易合同
- 二零二五年度綠色能源股份轉(zhuǎn)讓合同
- 2024年人教版小學(xué)三年級(jí)信息技術(shù)(下冊(cè))期末試卷附答案
- TB 10012-2019 鐵路工程地質(zhì)勘察規(guī)范
- 新蘇教版三年級(jí)下冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)(背誦用)
- 鄉(xiāng)鎮(zhèn)風(fēng)控維穩(wěn)應(yīng)急預(yù)案演練
- 腦梗死合并癲癇病人的護(hù)理查房
- 蘇教版四年級(jí)上冊(cè)脫式計(jì)算300題及答案
- 犯罪現(xiàn)場(chǎng)保護(hù)培訓(xùn)課件
- 扣款通知單 采購(gòu)部
- 電除顫操作流程圖
- 湖北教育出版社三年級(jí)下冊(cè)信息技術(shù)教案
- 設(shè)計(jì)基礎(chǔ)全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論