版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
.z.研究HarbinInstituteofTechnologyatWeihai課程設(shè)計報告〔論文〕課程名稱:防火墻與入侵檢測設(shè)計題目:簡單個人防火墻的設(shè)計院系:計算機科學(xué)與技術(shù)學(xué)院班級:設(shè)計者:學(xué)號:指導(dǎo)教師:設(shè)計時間:2011年10月10日--2011年10月21日**工業(yè)大學(xué)〔威海〕二零一一年十月-.z**工業(yè)大學(xué)〔威?!秤嬎銠C學(xué)院?防火墻與入侵檢測課程設(shè)計?驗收及成績評定表〔工程組〕工程名稱職責(zé)學(xué)號姓名主要分工組長080420103李凡需求分析、概要設(shè)計、編寫驅(qū)動程序、文檔編寫組員080420101趙丹界面設(shè)計、編寫相關(guān)代碼、文檔編寫組員080420102馮曉雯運行調(diào)試、文檔編寫設(shè)計開場日期工程完成日期文檔評審成績〔共50分〕評審工程評審內(nèi)容成績標(biāo)準(zhǔn)評審成績工程名稱課題是否從實際出發(fā),是否具有創(chuàng)意等10文檔格式文檔格式是否規(guī)*;文字是否規(guī)*;圖表是否規(guī)*;術(shù)語是否準(zhǔn)確等20分文檔質(zhì)量程序設(shè)計思想與整體框架是否清晰等20分文檔總體評價總成績程序功能完備性評審成績〔共50分〕評審工程評審內(nèi)容成績標(biāo)準(zhǔn)評審成績程序運行狀況程序是否能正常運行;是否出現(xiàn)死鎖;是否遇到錯誤而中止運行10分程序正確性對于給定的輸入數(shù)據(jù),是否能得到正確的輸出結(jié)果15分程序與文檔的一致性程序與各種文檔的內(nèi)容是否一致5分程序的代碼量程序代碼量的大小10分實現(xiàn)方法圖形界面或命令行界面,美觀程度5分實現(xiàn)語言面向過程或面向?qū)ο?分程序總體評價總成績**工業(yè)大學(xué)〔威?!痴n程設(shè)計任務(wù)書姓名:趙丹馮曉雯李凡學(xué)號:080420101080420102080420103院〔系〕:計算機科學(xué)與技術(shù)學(xué)院專業(yè):信息平安—課程設(shè)計題目:簡單個人防火墻的設(shè)計問題闡述與分析:設(shè)計一個混合型防火墻或入侵檢測系統(tǒng),保證網(wǎng)絡(luò)平安,并在實際網(wǎng)絡(luò)環(huán)境中進展測試。一、功能要求:1、界面:可配置、可顯示系統(tǒng)運行結(jié)果2、規(guī)則:a)自行設(shè)計并實現(xiàn)防火墻或入侵檢測系統(tǒng)的規(guī)則語言,并撰寫相應(yīng)規(guī)則語言的解析器b)規(guī)則配置靈活,至少涉及IP地址〔IP地址段〕、端口、傳輸協(xié)議等。c)配置方式:分為立即更新與定量更新〔時間與數(shù)量兩種〕。3、運行結(jié)果:對運行結(jié)果分析,并以圖表形式動態(tài)連續(xù)展示4、日志:記錄日志,分析,并將運行結(jié)果存入數(shù)據(jù)庫5、相關(guān)文檔:a)概要設(shè)計,畫出系統(tǒng)構(gòu)造圖,主要算法流程圖等b)測試報告6、代碼:程序源碼要有相應(yīng)注釋,每個函數(shù)要寫明作用、入口參數(shù)含義、返回值含義,程度代碼的關(guān)鍵局部添加注釋二、性能要求:1、運行結(jié)果動態(tài)顯示,時間間隔最多為30秒2、局域網(wǎng)環(huán)境下,規(guī)則從下放到執(zhí)行,時間在秒級3、規(guī)則更新不應(yīng)影響系統(tǒng)運行,延遲低于1秒。工作量:需求分析。分析系統(tǒng)性能要求,設(shè)計系統(tǒng)總體的功能構(gòu)造概要設(shè)計。設(shè)計系統(tǒng)的根本處理流程、系統(tǒng)的組織構(gòu)造、模塊劃分、功能分配、接口設(shè)計、數(shù)據(jù)構(gòu)造設(shè)計等詳細(xì)設(shè)計。描述實現(xiàn)具體模塊所涉及到的主要算法、數(shù)據(jù)構(gòu)造、類的層次構(gòu)造及調(diào)用關(guān)系編碼。根據(jù)上一步對數(shù)據(jù)構(gòu)造、算法分析和模塊實現(xiàn)等方面的設(shè)計,開場具體的編寫程序工作測試和文檔生成。測試編寫好的系統(tǒng),編寫設(shè)計報告。工作方案安排:10月10日--11月12日:前期需求分析,知識準(zhǔn)備11月13日:完成系統(tǒng)的模塊化設(shè)計,并進展組內(nèi)分工11月14--11月19日:進展為期一周的代碼界面設(shè)計開發(fā)階段11月20日:進展系統(tǒng)測試,并完善工程11月21日:上交課程設(shè)計成果,包括工程文件、可執(zhí)行文件、開發(fā)設(shè)計文檔同組設(shè)計者及分工:1.080420101趙丹界面設(shè)計、編寫相關(guān)代碼、文檔編寫2.080420102馮曉雯運行調(diào)試、文檔編寫3.080420103李凡需求分析、概要設(shè)計、編寫驅(qū)動程序、文檔編寫-.z防火墻與入侵檢測課程設(shè)計報告軟硬件運行環(huán)境硬件推薦配置256M內(nèi)存網(wǎng)速OK軟件運行環(huán)境系統(tǒng)環(huán)境:Windows*P軟件環(huán)境:VC++6.0、IE或其他瀏覽器工程研究背景與意義背景意義:信息社會的到來給全球開展帶來了契機,信息技術(shù)的運用引起了人們生產(chǎn)方式,生活方式和思想觀念的轉(zhuǎn)變,極大地促進了人類社會開展和人類文明的進步,把人們帶進了嶄新的時代。認(rèn)清網(wǎng)絡(luò)的脆弱性和潛在威脅以及現(xiàn)實客觀存在的各種平安問題,采取強有力的平安策略,保障網(wǎng)絡(luò)信息的平安,是每一個國家和社會以及每一個團體和個人必須正視的事情。防火墻和入侵檢測系統(tǒng)那個就是其中一種簡潔有效的工具。它是一個或一組系統(tǒng),它在網(wǎng)絡(luò)之間執(zhí)行控制策略。需求分析:防火墻的過濾局部就是一種過濾塞,你可以讓你喜歡的東西通過這個塞子,別的玩意都統(tǒng)統(tǒng)過濾掉。在網(wǎng)絡(luò)的世界里,要由防火墻過濾的就是承載通信數(shù)據(jù)的通信包。一般需要實現(xiàn)以下功能:IP地址過濾功能:這項任務(wù)要檢查IP**,根據(jù)其IP源地址和目標(biāo)地址作出放行/丟棄決定。效勞器TCP/UDP端口過濾:僅依靠地址進展數(shù)據(jù)過濾在實際運用中是不可行的,還有個原因就是目標(biāo)主機上往往運行著多種通信效勞,所以在地址之外還要對效勞器的TCP/UDP端口進展過濾??蛻魴C也有TCP/UDP端口:如果阻塞入站的全部端口,則所有的客戶機都沒法使用網(wǎng)絡(luò)資源。雙向過濾:效勞的數(shù)據(jù)包可以進來,其他的全部擋在防火墻之外。檢查ACK位:通過監(jiān)視ACK位,我們就可以將進入網(wǎng)絡(luò)的數(shù)據(jù)限制在響應(yīng)包的*圍之內(nèi),于是遠(yuǎn)程系統(tǒng)根本無法發(fā)起TCP連接但卻能響應(yīng)收到的數(shù)據(jù)包了。UDP端口過濾:UDP包沒有ACK位所以不能進展ACK位過濾。:關(guān)鍵技術(shù)及解決方案3.1概要設(shè)計:該防火墻的主要功能:封包過濾,使用的技術(shù)是winsock2spi技術(shù),工作在應(yīng)用層,只能攔截應(yīng)用層的包,無法攔截驅(qū)動程序?qū)拥陌?.動態(tài)監(jiān)視〔1〕提供封包監(jiān)視界面。〔2〕碰到被攔阻的封包,根據(jù)規(guī)則經(jīng)行顯示?!?〕提供清空監(jiān)視列表,停頓/開場監(jiān)控停頓/開場滾動功能2.規(guī)則設(shè)置〔1〕手動添加,修改及刪除規(guī)則?!?〕自動添加規(guī)則?!?〕規(guī)則字段設(shè)置:規(guī)則中目的網(wǎng)絡(luò)ip地址段設(shè)置;規(guī)則中時間段的設(shè)置。〔4〕提供規(guī)則設(shè)置界面。3.規(guī)則文件構(gòu)造設(shè)計〔1〕規(guī)則規(guī)則編號。唯一編號。應(yīng)用程序名稱。保存應(yīng)用程序名稱和路徑。遠(yuǎn)端網(wǎng)絡(luò)類型。0:表示所有網(wǎng)絡(luò)1:表示局域網(wǎng)2:約束的網(wǎng)絡(luò)3:信任的網(wǎng)絡(luò)4:自定義。時間類型。0:任何時間1:工作時間2:工作業(yè)余時間3.:周末4:約束時間。規(guī)則動作。0:放行1:拒絕。進出方向。0:進1:出2:雙向。效勞類型。0:全部1:tcp2:udp3:ftp4:telnet5:6:pop37:smtp。端口。0:全部端口其他值:表示端口值。備注。保存說明信息。3.2詳細(xì)設(shè)計:1.系統(tǒng)原理圖:2.驅(qū)動程序中關(guān)鍵函數(shù)://過濾鉤子回調(diào)函數(shù)PF_FORWARD_ACTIONFilterPackets(unsignedchar*PacketHeader,unsignedchar*Packet,unsignedintPacketLength,unsignedintRecvInterfaceInde*,unsignedintSendInterfaceInde*,IPAddrRecvLinkNe*tHop,IPAddrSendLinkNe*tHop){ //提取IP頭 IPHeader*pIPHdr=(IPHeader*)PacketHeader; if(pIPHdr->ipProtocol==6)//是TCP協(xié)議. { //提取TCP頭TCPHeader*pTCPHdr=(TCPHeader*)Packet; //我們承受所有已經(jīng)建立連接的TCP封包 if(!(pTCPHdr->flags&0*02)) { returnPF_FORWARD; } } //與過濾規(guī)則相比較,決定采取的行動 CFilterList*pList=g_pHeader; while(pList!=NULL) { //比較協(xié)議 if(pList->tocol==0||pList->tocol==pIPHdr->ipProtocol) { //查看源IP地址 if(pList->ipf.sourceIP!=0&& (pList->ipf.sourceIP&pList->ipf.sourceMask)!=pIPHdr->ipSource) { pList=pList->pNe*t; continue; } //查看目標(biāo)IP地址 if(pList->ipf.destinationIP!=0&& (pList->ipf.destinationIP&pList->ipf.destinationMask)!=pIPHdr->ipDestination) { pList=pList->pNe*t; continue; } //如果是TCP封包,查看端口號 if(pIPHdr->ipProtocol==6) { TCPHeader*pTCPHdr=(TCPHeader*)Packet;if(pList->ipf.sourcePort==0||pList->ipf.sourcePort==pTCPHdr->sourcePort) { if(pList->ipf.destinationPort==0 ||pList->ipf.destinationPort==pTCPHdr->destinationPort) { //現(xiàn)在決定如何處理這個封包 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } } //如果是UDP封包,查看端口號 elseif(pIPHdr->ipProtocol==17) { UDPHeader*pUDPHdr=(UDPHeader*)Packet; if(pList->ipf.sourcePort==0||pList->ipf.sourcePort==pUDPHdr->sourcePort) { if(pList->ipf.destinationPort==0 ||pList->ipf.destinationPort==pUDPHdr->destinationPort) { //現(xiàn)在決定如何處理這個封包 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } } else { //對于其它封包,我們直接處理 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } //比較下一個規(guī)則 pList=pList->pNe*t; } //我們承受所有沒有注冊的封包 returnPF_FORWARD;}//注冊鉤子回調(diào)函數(shù)NTSTATUSSetFilterFunction(PacketFilterE*tensionPtrfilterFun){ NTSTATUSstatus=STATUS_SUCCESS; //取得IP過濾驅(qū)動設(shè)備對象。下面代碼執(zhí)行后,pDeviceObj變量將指向IP過濾驅(qū)動設(shè)備對象 PDEVICE_OBJECTpDeviceObj; PFILE_OBJECTpFileObj; //初始化IP過濾驅(qū)動的名稱 UNICODE_STRINGustrFilterDriver; RtlInitUnicodeString(&ustrFilterDriver,L"\\Device\\IPFILTERDRIVER"); //取得設(shè)備對象指針 status=IoGetDeviceObjectPointer(&ustrFilterDriver,FILE_ALL_ACCESS,&pFileObj,&pDeviceObj); if(!NT_SUCCESS(status)) { returnstatus; } //使用到IP過濾驅(qū)動中設(shè)備對象的指針創(chuàng)立一個IRP //填充PF_SET_E*TENSION_HOOK_INFO構(gòu)造 PF_SET_E*TENSION_HOOK_INFOfilterData; filterData.E*tensionPointer=filterFun; //我們需要初始化一個事件對象。 //構(gòu)建IRP時需要使用這個事件內(nèi)核對象,當(dāng)IP過濾取得承受到此IRP,完成工作以后會將它置位 KEVENTevent; KeInitializeEvent(&event,NotificationEvent,FALSE); //為設(shè)備控制請求申請和構(gòu)建一個IRP PIRPpIrp; IO_STATUS_BLOCKioStatus; pIrp=IoBuildDeviceIoControlRequest(IOCTL_PF_SET_E*TENSION_POINTER,//iocontrolcode pDeviceObj, (PVOID)&filterData, sizeof(PF_SET_E*TENSION_HOOK_INFO), NULL, 0, FALSE, &event, &ioStatus); if(pIrp==NULL) { //如果不能申請空間,返回對應(yīng)的錯誤代碼 returnSTATUS_INSUFFICIENT_RESOURCES; } //請求安裝鉤子回調(diào)函數(shù) //發(fā)送此IRP到IP過濾驅(qū)動 status=IoCallDriver(pDeviceObj,pIrp); //等待IP過濾驅(qū)動的通知 if(status==STATUS_PENDING) { KeWaitForSingleObject(&event,E*ecutive,KernelMode,FALSE,NULL); } status=ioStatus.Status; //去除資源 if(pFileObj!=NULL) ObDereferenceObject(pFileObj); returnstatus;}3.封裝CDriver類管理驅(qū)動程序:classCDriver{public://構(gòu)造函數(shù)和析構(gòu)函數(shù) //構(gòu)造函數(shù),pszDriverPath為驅(qū)動所在目錄,pszLinkName為符號連接名字 //在類的構(gòu)造函數(shù)中,將試圖創(chuàng)立或翻開效勞, CDriver(LPCTSTRpszDriverPath,LPCTSTRpszLinkName); //析構(gòu)函數(shù)。在這里,將停頓效勞, virtual~CDriver();//屬性 //此驅(qū)動是否可用 virtualBOOLIsValid(){return(m_hSCM!=NULL&&m_hService!=NULL);}//操作 //開啟效勞。也就是說驅(qū)動的DriverEntry函數(shù)將被調(diào)用 virtualBOOLStartDriver(); //完畢效勞。即驅(qū)動程序的DriverUnload例程將被調(diào)用 virtualBOOLStopDriver(); //翻開設(shè)備,即取得到此驅(qū)動的一個句柄 virtualBOOLOpenDevice(); //向設(shè)備發(fā)送控制代碼 virtualDWORDIoControl(DWORDnCode,PVOIDpInBuffer, DWORDnInCount,PVOIDpOutBuffer,DWORDnOutCount);//實現(xiàn)protected: charm_szLinkName[56]; //符號連接名稱 BOOLm_bStarted; //指定效勞是否啟動 BOOLm_bCreateService; //指定是否創(chuàng)立了效勞 HANDLEm_hSCM; //SCM數(shù)據(jù)庫句柄 HANDLEm_hService; //效勞句柄 HANDLEm_hDriver; //設(shè)備句柄};CDriver::CDriver(LPCTSTRpszDriverPath,LPCTSTRpszLinkName){ strncpy(m_szLinkName,pszLinkName,55); m_bStarted=FALSE; m_bCreateService=FALSE; m_hSCM=m_hService=NULL; m_hDriver=INVALID_HANDLE_VALUE; //翻開SCM管理器 m_hSCM=::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if(m_hSCM==NULL) { MessageBo*(0,"翻開效勞控制管理器失敗\n", "可能是因為您不擁有Administrator權(quán)限\n",0); return; } //創(chuàng)立或翻開效勞 m_hService=::CreateService(m_hSCM,m_szLinkName,m_szLinkName,SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, pszDriverPath,NULL,0,NULL,NULL,NULL); if(m_hService==NULL) { intnError=::GetLastError(); if(nError==ERROR_SERVICE_E*ISTS||nError==ERROR_SERVICE_MARKED_FOR_DELETE) { m_hService=::OpenService(m_hSCM,m_szLinkName,SERVICE_ALL_ACCESS); } } else { m_bCreateService=TRUE; }}CDriver::~CDriver(){ if(m_hDriver!=INVALID_HANDLE_VALUE) ::CloseHandle(m_hDriver); StopDriver(); if(m_bCreateService) ::DeleteService(m_hService); if(m_hService!=NULL) ::CloseServiceHandle(m_hService); if(m_hSCM!=NULL) ::CloseServiceHandle(m_hSCM);}BOOLCDriver::StartDriver(){ if(m_bStarted) returnTRUE; if(m_hService==NULL) returnFALSE; if(!::StartService(m_hService,0,NULL)) { intnError=::GetLastError(); if(nError==ERROR_SERVICE_ALREADY_RUNNING) m_bStarted=TRUE; else ::DeleteService(m_hService); } else { //啟動成功后,等待效勞進入運行狀態(tài) intnTry=0; SERVICE_STATUSss; ::QueryServiceStatus(m_hService,&ss); while(ss.dwCurrentState==SERVICE_START_PENDING&&nTry++<80) { ::Sleep(50); ::QueryServiceStatus(m_hService,&ss); } if(ss.dwCurrentState==SERVICE_RUNNING) m_bStarted=TRUE; } returnm_bStarted;}BOOLCDriver::StopDriver(){ if(!m_bStarted) returnTRUE; if(m_hService==NULL) returnFALSE; SERVICE_STATUSss; if(!::ControlService(m_hService,SERVICE_CONTROL_STOP,&ss)) { if(::GetLastError()==ERROR_SERVICE_NOT_ACTIVE) m_bStarted=FALSE; } else { //等待效勞完全停頓運行 intnTry=0; while(ss.dwCurrentState==SERVICE_STOP_PENDING&&nTry++<80) { ::Sleep(50); ::QueryServiceStatus(m_hService,&ss); } if(ss.dwCurrentState==SERVICE_STOPPED) m_bStarted=FALSE; } return!m_bStarted;}BOOLCDriver::OpenDevice(){ if(m_hDriver!=INVALID_HANDLE_VALUE) returnTRUE; charsz[256]="; wsprintf(sz,"\\\\.\\%s",m_szLinkName); //翻開到驅(qū)動程序所控制設(shè)備的句柄 m_hDriver=::CreateFile(sz, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_E*ISTING, FILE_ATTRIBUTE_NORMAL, NULL); return(m_hDriver!=INVALID_HANDLE_VALUE);}DWORDCDriver::IoControl(DWORDnCode,PVOIDpInBuffer, DWORDnInCount,PVOIDpOutBuffer,DWORDnOutCount){ if(m_hDriver==INVALID_HANDLE_VALUE) return-1; //向驅(qū)動程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工廠原料轉(zhuǎn)讓合同范例
- 托管運營合同范文
- 攝影設(shè)備租借合同范本
- 包裝服務(wù)合同模板2024年
- Castleman病的診斷與治療
- 2024年房屋建筑施工安全責(zé)任協(xié)議書范文
- 產(chǎn)品與企業(yè)文化廣告創(chuàng)意合作協(xié)議
- 合伙權(quán)益出售合同樣本
- 居間合同范本樣本
- 高校校舍擴建協(xié)議范本
- 國家基本藥物目錄
- 國家自然科學(xué)基金項目申請課件
- 抑郁癥和抑郁情緒課件
- 經(jīng)期延長1課件
- 生物醫(yī)學(xué)傳感-生物傳感器課件
- 安全警示標(biāo)示牌整方案
- 三年級數(shù)學(xué)單位換算練習(xí)題
- 同仁堂-老字號的營銷典范案例分析課件
- 質(zhì)量員培訓(xùn)教程(質(zhì)量標(biāo)準(zhǔn))課件
- 護理對講系統(tǒng)施工技術(shù)方案
- STCW公約馬尼拉修正案(中文譯稿草稿)
評論
0/150
提交評論