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

正文內(nèi)容

alinux防火墻設(shè)計與實現(xiàn)畢業(yè)設(shè)計論文-資料下載頁

2025-01-16 05:08本頁面
  

【正文】 VMware 強大的網(wǎng)絡(luò)功能,可以在一臺計算機上建立一個局域網(wǎng),這個網(wǎng) 絡(luò)的行為與真實的網(wǎng)絡(luò)完全一致,而且不用擔(dān)心虛擬網(wǎng)卡和虛擬交換機會損壞,這樣就可以拋開真實網(wǎng)絡(luò)中各種瑣碎的硬件沖突的可能性,潛下心來通過虛擬網(wǎng)絡(luò)研究物理網(wǎng)絡(luò)的核心邏輯 [4]。 本設(shè)計需要使用網(wǎng)絡(luò)環(huán)境做開發(fā)測試,不方便使用實際網(wǎng)絡(luò),所以使用 Vmware安裝兩臺 Linux 加上宿主機 Widows, 3 臺主機可以組成一個虛擬網(wǎng)絡(luò)。方便開發(fā)測試使用。 LINUX 下 C 與 PERL 編程基礎(chǔ) 源程序的編輯 在 Linux 下面可以使用 vim 等命令行編輯器或者使用 gedit 等圖形化編輯器來編輯源程序?;蛘咭部梢栽?windows 下編輯好了通過 ftp 等方式上傳到 Linux。本設(shè)計所有源代碼均使用 vim 編輯。 源程序的編譯 在 Linux 下面, 使用 GNU gcc 編譯器編譯 C 語言源程序。源程序較多不適合使用 gcc 來編譯,通過編寫 Makefile 文件來實現(xiàn)多個文件同時編譯 [8]。 由于 Perl 語言是解釋性語言,不需要編譯。寫好 Perl 腳本之后,給予可執(zhí)行權(quán)限,執(zhí)行 Perl 腳本即可 [9]。關(guān)于 Perl 語言的資料,本論文不再詳述。 LINUX 內(nèi)核介紹 Linux 內(nèi)核支持 PentiumIV 處理器,也 支持 MMX 和 MMX2。并且還增加了對所有處理器的最優(yōu)化指令來加速 Linux。它還支持與 Intel 兼容的芯片,例如由 AMD和 Cyrix 生產(chǎn)的 CPU。另外, Linux 將包含對其它硬件的支持,這些硬件經(jīng)常出現(xiàn)在更新的芯片上,包括非 Intel 的各種 MTRR(Memory Type Range Registers),這些MTRR 將在一些高帶寬的設(shè)備上改進性能。 Linux 的內(nèi)核可以看作是各種模塊和子系統(tǒng)的集合,這些模塊和子系統(tǒng)包括驅(qū)動程序、協(xié)議以及其他部件。他們通過 API(Application Programming Interface),輔助在內(nèi)核的周圍,然后由 API 提供調(diào)用內(nèi)核的標準方法。這個中心結(jié)構(gòu)的基本特征就是調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)和資源分配。 Linux 在網(wǎng)絡(luò)協(xié)議棧的實現(xiàn)方面處于領(lǐng)先西南交通大學(xué)本科 畢業(yè)設(shè)計 (論文 ) 第 15 頁 地位。 內(nèi)核對以前版本中網(wǎng)絡(luò)協(xié)議有很多的更新,如新的驅(qū)動、 BUG 修補和現(xiàn)有驅(qū)動上的新功能。 防火墻方面, Linux 的防火墻技術(shù)經(jīng)歷了若干代的變革,一步步的發(fā)展而來。最開始的 ipfwadm 是 Alan Cox 在 Linux kernel 發(fā)展的初期,從 FreeBSD 的內(nèi)核代碼中移植過來的。后 來經(jīng)歷了 ipchains,再經(jīng)由 Paul Russell 在 Linux kernel 系列的開發(fā)過程中發(fā)展了 Netfilter 這個架構(gòu)。 Linux 內(nèi)核 版本中集成了 Netfilter框架,該框架是 Linux 平臺新的網(wǎng)絡(luò)安全功能框架,實現(xiàn)了多種網(wǎng)絡(luò)安全功能:數(shù)據(jù)包過濾、狀態(tài)保持、 NAT,以及抗攻擊等 等 [2]。 Linux 內(nèi)核模塊設(shè)計 Linux 操作系統(tǒng)的內(nèi)核是單一體系結(jié)構(gòu)( monolithic kernel),也就是說,整個內(nèi)核是一個單獨的非常大的程序。對于單一體系結(jié)構(gòu)的 操作系統(tǒng)來說,所有的模塊都集成在一起,系統(tǒng)的速度和性能都很好,但是可擴展性和維護性就相對比較差。為了彌補單一體系結(jié)構(gòu)的這種缺陷, Linux 操作系統(tǒng)使用了一種全新的機制 ——模塊設(shè)計,用戶可以根據(jù)需要,在不需要對內(nèi)核重新編譯的情況下,模塊能動態(tài)地載入內(nèi)核或從內(nèi)核卸載出來以擴展內(nèi)核的功能 [7]。 模塊的定義 模塊( module)是在內(nèi)核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是其代碼可以在運行時鏈接到系統(tǒng)中作為內(nèi)核的一部分運行或從內(nèi)核中取出,從而可以動態(tài)擴充內(nèi)核的功能。這種 目標代碼通常由一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成,用來實現(xiàn)一種文件系統(tǒng)、一個驅(qū)動程序或其他內(nèi)核上層的功能。模塊機制的完整叫法應(yīng)該是動態(tài)可加載內(nèi)核模塊( Loadable Kernel Module , LKM),一般就簡稱為 模塊 [7]。 模塊的優(yōu)點 1. 模塊使得內(nèi)核更加緊湊和靈活。 2. 修改內(nèi)核時,不必重新編譯整個內(nèi)核,可以節(jié)省時間。系統(tǒng)中如果需要使用新模塊,只要編譯相應(yīng)的內(nèi)核模塊然后使用特定用戶空間的程序?qū)⒛K插入即可。 3. 模塊可以不依賴于某個固定的硬件平臺,即使它依賴于某些特殊的硬件特征。 4. 模塊的目標 代碼一旦被鏈接到內(nèi)核,它的作用和靜態(tài)鏈接的內(nèi)核目標代碼完全等價。所以當調(diào)用模塊的函數(shù)時,無須顯式的消息 傳遞 [7]。 西南交通大學(xué)本科 畢業(yè)設(shè)計 (論文 ) 第 16 頁 模塊的結(jié)構(gòu) Module 的數(shù)據(jù)結(jié)構(gòu)在 include/Linux/ 中聲明。下面是 module 數(shù)據(jù)結(jié)構(gòu)的主要組成 部分 [1]: struct module{ unsigned long size_of_struct。/*module 結(jié)構(gòu)的大小 */ struct module *next。 /*下一個 module 的地址 */ const char *name。 /*module 的名字 */ unsigned long size。 /*module 的大小,是整個 module 的總長度, 包 括 module 結(jié)構(gòu),代碼,數(shù)據(jù)等 */ ………… int (*init)(void)。 /*用戶實現(xiàn)的 init_module 函數(shù)的入口 */ void (*cleanup)(void)。 /*用戶實現(xiàn)的 clean_up 函數(shù)的入口 */ ………… } 每個 module 在 kernel 中都有一個 module 結(jié)構(gòu)與其對應(yīng),各個 module 之間用 next構(gòu)成單向鏈表。 kernel 中還有一個全局變量 module_list,存儲鏈表的頭指針,一個新的 module 被加載后,會被加載到鏈表的最開始,因此 module_list 的值就是新加載module 的值。 kernel 中還有一個全局變量是 kernel_module,在支持 module 方式的內(nèi)核中,內(nèi)核本身被描述成一個大 module,這個 module 將被以后加載的所有 module所引用。如果 kernel 當前狀態(tài)一個 module 都沒有加載,那么 module_list 的值就是kernel_module。 每 個 Linux 內(nèi)核模塊至少由兩個基本的函數(shù)組成: int init_module(void) 用于初始化所有的數(shù)據(jù); void cleanup_module(void) 用于清除數(shù)據(jù),從而模塊能有一個安全的退 出 [7]。 NETFILTER 原理介紹 什么是 Netfilter Netfilter 比以前任何一版 Linux 內(nèi)核的防火墻子系統(tǒng)都要完善強大。 Netfilter 提供了一個抽象、通用化的框架,該框架定義的一個子功能的實現(xiàn)就是包過濾子系統(tǒng)。因此不要在 中期望討論諸如 “ 如何在 中架設(shè) 一個防火墻或者偽裝網(wǎng)關(guān) ” 這樣的話題,這些只是 Netfilter 功能的一部分。 Netfilter 框架包含以下三部分 。 第一部分為每種網(wǎng)絡(luò)協(xié)議 (IPv IPv6 等 )定義一套鉤子函數(shù)( IPv4 定義了 5 個鉤子函數(shù) ), 這些鉤子函數(shù)在數(shù)據(jù)報流過協(xié)議棧的幾個關(guān)鍵點被調(diào)用。在這幾個點中,西南交通大學(xué)本科 畢業(yè)設(shè)計 (論文 ) 第 17 頁 協(xié)議棧將把數(shù)據(jù)報及鉤子函數(shù)標號作為參數(shù)調(diào)用 Netfilter 框架。 第二部分內(nèi)核的任何模塊可以對每種協(xié)議的一個或多個鉤子進行注冊,實現(xiàn)掛接,這樣當某個數(shù)據(jù)包被傳遞給 Netfilter 框架時,內(nèi)核能檢測是否有任何模塊對該協(xié)議和鉤子函數(shù)進行 了注冊。若注冊了,則調(diào)用該模塊的注冊時使用的回調(diào)函數(shù),這樣這些模塊就有機會檢查 (可能還會修改 )該數(shù)據(jù)包、丟棄該數(shù)據(jù)包及指示 Netfilter 將該數(shù)據(jù)包傳入用戶空間的隊列。 第三部分那些排隊的數(shù)據(jù)包是被傳遞給用戶空間的異步地進行處理。一個用戶進程能檢查數(shù)據(jù)包,修改數(shù)據(jù)包,甚至可以重新將該數(shù)據(jù)包通過離開內(nèi)核的同一個鉤子函數(shù)中注入到內(nèi)核中。 所有的包過濾 /NAT 等等都基于該框架。內(nèi)核網(wǎng)絡(luò)代碼中不再有到處都是的、混亂的修改數(shù)據(jù)包的代碼了。當前 Netfilter 框架在 IPv IPv6 及 Deet 網(wǎng)絡(luò)棧中被實現(xiàn) [10]。 Netfilter 在 IPv4 中的結(jié)構(gòu) Linux 內(nèi)核中的 Netfilter 位于 Linux 網(wǎng)絡(luò)層( IP 層)和防火墻內(nèi)核模塊之間,在內(nèi)核中通過 Netfilter 結(jié)構(gòu)將防火墻對數(shù)據(jù)包的處理引入到 IP 層中實現(xiàn),防火墻代碼與實現(xiàn) IP 層的代碼完全分離,從而構(gòu)成不同的模塊。 Linux 可以支持不同的協(xié)議,如TCP/IP, APPLETALK, 等,這些協(xié)議分別對應(yīng)著一個唯一的協(xié)議號碼,如 IPv4的協(xié)議號定義: define AF_INET 2 /*Inter IP Protocol*/ 每種協(xié)議都可以有自己的防火墻。在內(nèi)核中定義了一個為 firewall_ops 的結(jié)構(gòu)體,來為各種協(xié)議的防火墻提供一個統(tǒng)一的接口。結(jié)構(gòu)如圖 31: 圖 31 Linux 防火墻機制 每種協(xié)議都可以對應(yīng)多級防火墻,每個協(xié)議的多級防火墻都有各自的優(yōu)先級,按照優(yōu)先級,從高到低的順序?qū)⑵?firewall_ops 連成一個內(nèi)核與防火墻的接口鏈表。數(shù)據(jù)包在經(jīng)過 IP 層處理時,會檢查相應(yīng)的鉤子函數(shù)鏈表中是否有 HOOK 函數(shù)注冊,如西南交通大學(xué)本科 畢業(yè)設(shè)計 (論文 ) 第 18 頁 果存在注冊的 HOOK 函數(shù),各級防火墻就會順著其鏈表一一處理。 Netfilter 中定義了五個關(guān)于 IPv4 的 hook ,對這些符號的聲明可以在Linux/ 中找到。這些 hook 的位置如下圖 32: 圖 32 IPv4 中 IP 層的 5 個 HOOK 點的位置 [11] 上圖中 HOOK 點位置的名稱及其調(diào)用時機如表 31: 表 31 HOOK 點的名稱及其調(diào)用時機 [11] HOOK 名稱 調(diào)用的時機 [1]NF_IP_PRE_ROUTING 在完整性校驗之后,選路確定之前 [2]NF_IP_LOCAL_IN 在選路確定之后,且數(shù)據(jù)包的目的是本地主機 [3]NF_IP_FORWARD 目的地是其它主機地數(shù)據(jù)包 [4]NF_IP_LOCAL_OUT 本機進程的數(shù)據(jù)包在其離開本地主機的過程中 [5]NF_IP_POST_ROUTING 在數(shù)據(jù)包離開本地主機 “ 上線 ” 之前 NF_IP_PRE_ROUTING 這個 HOOK 點是數(shù)據(jù)包被接收到之后調(diào)用的第一個HOOK。本防火墻正是通過將自己編寫的 hook 函數(shù)掛接到此點來實現(xiàn)對網(wǎng)絡(luò)數(shù)據(jù)包的控制。 在防火墻規(guī)則中制定了對需要檢查數(shù)據(jù)的選擇標準,以及如果符合規(guī)則中的條件后要采取的動作。這些動作定義在內(nèi)核的 中,這些值也是向內(nèi)核提供接口函數(shù)的返回值,就是 , , 所調(diào)用宏處理函數(shù)的返回值。 處理函數(shù)返回值及其含義如表 32: NF_DROP 這個返回值的含義是該數(shù)據(jù)包將被完全的丟棄,所有為它分配的資源都應(yīng)當被釋放。 NF_ACCEPT 這個返回值告訴 Netfilter:到目前為止,該數(shù)據(jù)包還是被接受的并且該數(shù)據(jù)包應(yīng)當被遞交到網(wǎng)絡(luò)堆棧的下一個階段。 NF_STOLEN 是一個有趣的返回值,因為它告訴 Netfilter, “ 忘掉 ” 這個數(shù)據(jù)包。這里告訴 Netfilter 的是:該 hook 函數(shù)將從此開始對數(shù)據(jù)包的處理,并且 Netfilter 應(yīng)當放棄對該數(shù)據(jù)包做任何西南交通大學(xué)本科 畢業(yè)設(shè)計 (論文 ) 第 19 頁 的處理。但是,這并不意味著該數(shù)據(jù)包的資源已經(jīng)被釋放。這個數(shù)據(jù)包以及它的sk_buff 數(shù)據(jù)結(jié)構(gòu)仍然有效,只是 hook 函數(shù)從 Netfilter 獲取了該數(shù)據(jù)包的所有權(quán)。這個返回值 NF_REPEAT 請求 Netfilter 再次調(diào)用這個 hook 函數(shù)。這個返回值應(yīng)當謹慎使用,否則容易形成死循 環(huán) [12]。 表 32 處理函數(shù)返回值及其含義 [11] 返回值 含義 NF_DROP 丟棄該數(shù)據(jù)包 NF_ACCEPT 保留該數(shù)據(jù)包 NF_STOLEN 忘掉該數(shù)據(jù)包 NF_QUEUE 將該數(shù)據(jù)包插入到用戶空間 NF_REPEAT 再次調(diào)用該 hook 函數(shù) 如果某協(xié)議沒有注冊防火墻,則返回默認策略,令數(shù)據(jù)包通過。 如圖 32 所示,數(shù)據(jù)包從左邊( HOOK 點 NF_IP_PRE_ROUTING 之前)進入系統(tǒng),進行 IP 校驗以后,數(shù)據(jù)包經(jīng)過第一個鉤子函數(shù) NF_IP_PRE_ROUTING 處理,然后就進入路由代碼,其決定該數(shù)據(jù)包是要轉(zhuǎn)發(fā)還是發(fā)給本機;若該數(shù)據(jù)包是發(fā)給本機的,則該數(shù)據(jù)經(jīng)過鉤子函數(shù) NF_IP_LOCAL_IN 處理以后然后傳遞給上層協(xié) 議;若數(shù)據(jù)包應(yīng)該被轉(zhuǎn)發(fā)則被 NF_IP_FORWAD 處理;經(jīng)過轉(zhuǎn)發(fā)的數(shù)據(jù)包經(jīng)過最后一個鉤子函數(shù) NF_IP_
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1