版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)八協(xié)議分析器程序的設(shè)計(jì)和實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康模?1)掌握對(duì)網(wǎng)絡(luò)上傳輸數(shù)據(jù)包的捕獲方法。(2)解析Ethernet網(wǎng)數(shù)據(jù)幀頭部的所有信息。(3)解析IP、ICMP數(shù)據(jù)包(4)解析傳輸層和應(yīng)用層相關(guān)協(xié)議的頭部信息(5)設(shè)立過(guò)濾規(guī)則,能過(guò)濾相應(yīng)協(xié)議的數(shù)據(jù)包。(6)規(guī)定有良好的編程規(guī)范與注釋信息,規(guī)定有具體的說(shuō)明文檔,涉及程序的設(shè)計(jì)思想、活動(dòng)圖、關(guān)鍵問(wèn)題以及解決方法。2實(shí)驗(yàn)環(huán)境:(1)VC6.0(2)局域網(wǎng)能連接Internet。3.程序設(shè)計(jì)的關(guān)鍵問(wèn)題以及解決方法有哪些?當(dāng)應(yīng)用程序通過(guò)IP網(wǎng)絡(luò)傳送數(shù)據(jù)時(shí),數(shù)據(jù)被送入TCP/IP協(xié)議棧中,然后從上至下逐個(gè)通過(guò)每一層,直到最后被當(dāng)作一串比特流送入網(wǎng)絡(luò)。其中每一層對(duì)收到的數(shù)據(jù)都要增長(zhǎng)一些首部信息,這個(gè)過(guò)程被稱作封裝。通過(guò)以太網(wǎng)傳輸?shù)谋忍亓鞣Q作幀。在傳輸?shù)牧硪欢?,?dāng)目的主機(jī)收到一個(gè)以太網(wǎng)數(shù)據(jù)幀時(shí),數(shù)據(jù)就開(kāi)始從協(xié)議棧由底向上逐層解析,去掉各層協(xié)議所加上的報(bào)文頭部。每層協(xié)議均要檢查報(bào)文頭部中的協(xié)議標(biāo)記字段,以擬定要接受數(shù)據(jù)的上層協(xié)議,最終從報(bào)文中解析出應(yīng)用層數(shù)據(jù)后交給應(yīng)用程序解決。本次要編寫的協(xié)議分析器,就是從網(wǎng)絡(luò)中捕獲數(shù)據(jù)包并對(duì)其進(jìn)行解析的過(guò)程。因此,我們需要了解每層協(xié)議所規(guī)定的報(bào)文格式,然后由底向上逐層對(duì)數(shù)據(jù)包進(jìn)行解碼,最后將分析的結(jié)果顯示出來(lái)。描述程序設(shè)計(jì)過(guò)程,并畫出程序活動(dòng)圖。協(xié)議分析器總體結(jié)構(gòu):協(xié)議分析器的整體結(jié)構(gòu)按功能應(yīng)分為三個(gè)部分,自底向上分別是數(shù)據(jù)捕獲模塊、協(xié)議解析模塊和用戶顯示模塊。數(shù)據(jù)包捕獲流程:捕獲數(shù)據(jù)包的算法一般分為以下幾步:獲取并列出當(dāng)前網(wǎng)絡(luò)設(shè)備列表。由用戶選擇并打開(kāi)指定網(wǎng)卡。根據(jù)過(guò)濾規(guī)則設(shè)立過(guò)濾器。捕獲數(shù)據(jù)包并進(jìn)行解析解決:協(xié)議解析模塊:對(duì)捕獲的數(shù)據(jù)包按照數(shù)據(jù)鏈路層(MAC)、網(wǎng)絡(luò)層(IP、ARP/RARP)、傳輸層(TCP、UDP、ICMP)和應(yīng)用層(HTTP等)的層次結(jié)構(gòu)自底向上進(jìn)行解析,最后將解析結(jié)果顯示輸出。解析Ethernet幀解析ARP數(shù)據(jù)包解析IP數(shù)據(jù)包解析ICMP,TCP和UDP數(shù)據(jù)包給出關(guān)鍵代碼,并附注釋。解析Ethernet幀typedefstruct{BYTEDesMacAddr[6]; //目的地址 BYTESrcMacAddr[6]; //源地址 WORDLengthOrType; //數(shù)據(jù)長(zhǎng)度或類型}MAC_HEADER;//MAC幀類型定義constu_shortMAC_TYPE_IP =0x0800;constu_shortMAC_TYPE_ARP =0x0806;constu_shortMAC_TYPE_RARP =0x8035;MAC_HEADER*pMacHdr=(MAC_HEADER*)pPkt;//Mac目的地址strItem.Format("Destinationaddress:%02X:%02X:%02X:%02X:%02X:%02X", pMacHdr->DesMacAddr[0], pMacHdr->DesMacAddr[1], pMacHdr->DesMacAddr[2], pMacHdr->DesMacAddr[3], pMacHdr->DesMacAddr[4], pMacHdr->DesMacAddr[5]);//Mac源地址strItem.Format("Sourceaddress:%02X:%02X:%02X:%02X:%02X:%02X", pMacHdr->SrcMacAddr[0], pMacHdr->SrcMacAddr[1], pMacHdr->SrcMacAddr[2], pMacHdr->SrcMacAddr[3], pMacHdr->SrcMacAddr[4], pMacHdr->SrcMacAddr[5]);//類型/長(zhǎng)度字段if(ntohs(pMacHdr->LengthOrType)>1500)//類型字段(EthernetV2.0){ //根據(jù)類型字段調(diào)用相應(yīng)的上層協(xié)議解決函數(shù) if(ntohs(pMacHdr->LengthOrType)==MAC_TYPE_IP) //IP協(xié)議 { strItem="IP"; ParseIPPacket((BYTE*)pMacHdr+sizeof(MAC_HEADER), iLen-sizeof(MAC_HEADER)); } elseif(ntohs(pMacHdr->LengthOrType)==MAC_TYPE_ARP) //ARP協(xié)議 { strItem="ARP"; ParseARPPacket((BYTE*)pMacHdr+sizeof(MAC_HEADER), iLen-sizeof(MAC_HEADER)); } elseif(ntohs(pMacHdr->LengthOrType)==MAC_TYPE_RARP) //RARP協(xié)議 { strItem="RARP"; ParseRARPPacket((BYTE*)pMacHdr+sizeof(MAC_HEADER), iLen-sizeof(MAC_HEADER)); } else //其他 strItem="UNKNOWN";}else//長(zhǎng)度字段(IEEE802格式){ strItem.Format("Length:%dbytes",ntohs(pMacHdr->LengthOrType)); ……/*解析IEEE802數(shù)據(jù)幀,省略*/}解析ARP數(shù)據(jù)包//ARP頭部結(jié)構(gòu)typedefstruct{ u_shorthardware_type; //16位硬件類型u_shortproto_type; //16位協(xié)議類型 u_charhardware_addr_len; //8位硬件地址長(zhǎng)度 u_charproto_addr_len; //8位協(xié)議地址長(zhǎng)度 u_shortoperation_code; //16位操作碼 u_charsrc_mac_addr[6]; //源Ethernet網(wǎng)地址 u_charscr_ip_addr[4]; //源IP地址 u_chardest_mac_addr[6]; //目的Ethernet網(wǎng)地址 u_chardest_ip_addr[4]; //目的IP地址}ARP_HEADER;//ARP報(bào)文操作碼類型,1為請(qǐng)求,2位應(yīng)答constu_shortARP_OP_REQUEST =1;//ARP請(qǐng)求constu_shortARP_OP_REPLY =2;//ARP應(yīng)答ARP_HEADER*pARPHdr=(ARP_HEADER*)pPkt;ntohs(pARPHdr->hardware_type); //硬件類型ntohs(pARPHdr->proto_type); //上層協(xié)議類型pARPHdr->hardware_addr_len; //硬件地址長(zhǎng)度pARPHdr->proto_addr_len; //協(xié)議地址長(zhǎng)度//操作類型if(ntohs(pARPHdr->operation_code)==ARP_OP_REQUEST) strItem="(Request)";elseif(ntohs(pARPHdr->operation_code)==ARP_OP_REPLY) strItem="(Reply)";//源Mac地址strItem.Format("Sender'shardwareaddress:%02X:%02X:%02X:%02X:%02X:%02X", pARPHdr->src_mac_addr[0], pARPHdr->src_mac_addr[1], pARPHdr->src_mac_addr[2], pARPHdr->src_mac_addr[3], pARPHdr->src_mac_addr[4], pARPHdr->src_mac_addr[5]);//源IP地址in_addripAddr;memcpy(&ipAddr,pARPHdr->scr_ip_addr,sizeof(in_addr));inet_ntoa(ipAddr); //轉(zhuǎn)化為點(diǎn)分十進(jìn)制字符串//目的Mac地址strItem.Format("Target'shardwareaddress:%02X:%02X:%02X:%02X:%02X:%02X", pARPHdr->dest_mac_addr[0], pARPHdr->dest_mac_addr[1], pARPHdr->dest_mac_addr[2], pARPHdr->dest_mac_addr[3], pARPHdr->dest_mac_addr[4], pARPHdr->dest_mac_addr[5]);//目的IP地址memcpy(&ipAddr,pARPHdr->dest_ip_addr,sizeof(in_addr));inet_ntoa(ipAddr); //轉(zhuǎn)化為點(diǎn)分十進(jìn)制字符串//填充字段長(zhǎng)度strItem.Format("Framepadding:%dbytes",iLen-sizeof(ARP_HEADER));解析IP數(shù)據(jù)包//IP頭部結(jié)構(gòu)typedefstruct{ unsignedchar hdr_len :4; //4位頭部長(zhǎng)度 unsignedchar version :4; //4位版本號(hào) unsignedchar tos; //8位服務(wù)類型 unsignedshort total_len; //16位總長(zhǎng)度 unsignedshort identifier; //16位標(biāo)記符 unsignedshort frag_and_flags; //3位標(biāo)志+13位片偏移 unsignedchar ttl; //8位生存時(shí)間 unsignedchar protocol; //8位上層協(xié)議號(hào) unsignedshort checksum; //16位校驗(yàn)和 unsignedlong source_ip; //32位源IP地址 unsignedlong dest_ip; //32位目的IP地址}IP_HEADER;IP_HEADER*pIPHdr=(IP_HEADER*)pPkt;……/*解析IP頭部各字段并顯示輸出*///根據(jù)不同上層協(xié)議調(diào)用相應(yīng)解析函數(shù)switch(pIPHdr->protocol){caseIPPROTO_TCP: strItem="TCP"; ParseTCPPacket((BYTE*)pIPHdr+iIPHdrLen,iLen-iIPHdrLen); break;caseIPPROTO_UDP: strItem="UDP"; ParseUDPPacket((BYTE*)pIPHdr+iIPHdrLen,iLen-iIPHdrLen); break;caseIPPROTO_ICMP: strItem="ICMP"; ParseICMPPacket((BYTE*)pIPHdr+iIPHdrLen,iLen-iIPHdrLen); break;default: strItem="OTHERS";}解析ICMP,TCP和UDP數(shù)據(jù)包//ICMP基本頭部typedefstruct{ BYTE type; //8位類型 BYTE code; //8位代碼 USHORT cksum; //16位校驗(yàn)和}ICMP_BASE_HEADER;//----------------------------------------------------//ICMP回顯頭部(回顯請(qǐng)求、回顯應(yīng)答)typedefstruct{ ICMP_BASE_HEADERbase_hdr; //基本頭部 USHORT id; //16位標(biāo)記符 USHORT seq; //16位序列號(hào)}ICMP_ECHO_HEADER;//----------------------------------------------------//ICMP差錯(cuò)報(bào)文頭部(超時(shí)及目的不可達(dá))typedefstruct{ ICMP_BASE_HEADERbase_hdr; //基本頭部 ULONG unused; //32位未用,必須為0}ICMP_ERROR_HEADER;pICMPHdr->type; //類型pICMPHdr->code; //代碼ntohs(pICMPHdr->cksum); //校驗(yàn)和//根據(jù)不同類型解析后續(xù)字段switch(pICMPHdr->type){caseICMP_ECHO_REQUEST: //回顯請(qǐng)求報(bào)文caseICMP_ECHO_REPLY: //回顯應(yīng)答報(bào)文 { ICMP_ECHO_HEADER*pICMPEchoHdr=(ICMP_ECHO_HEADER*)pPkt; ntohs(pICMPEchoHdr->id); //標(biāo)記符 ntohs(pICMPEchoHdr->seq); //序列號(hào) if(iLen>sizeof(ICMP_ECHO_HEADER)) //選項(xiàng)數(shù)據(jù) { for(inti=0;i<iLen-sizeof(ICMP_ECHO_HEADER);i++) ……/*打印選項(xiàng)數(shù)據(jù)*/ } break; } caseICMP_TIMEOUT: //超時(shí)差錯(cuò)報(bào)文 caseICMP_HOST_UNREACHABLE: //目的不可達(dá)差錯(cuò)報(bào)文 { ICMP_ERROR_HEADER*pICMPErrHdr=(ICMP_ERROR_HEADER*)pPkt; ntohl(pICMPErrHdr->unused); //保存字段 //解析產(chǎn)生差錯(cuò)的數(shù)據(jù)報(bào)IP首部(含選項(xiàng)字段)及其載荷的前8個(gè)字節(jié) ParseIPPacket((BYTE*)pICMPErrHdr+sizeof(ICMP
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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版門診住院一體化服務(wù)承包合同4篇
- 二零二五年版出軌男方離婚賠償與子女共同撫養(yǎng)協(xié)議3篇
- 2025年度綠色農(nóng)業(yè)項(xiàng)目貸款合同范本8篇
- 2025年度摩托車租賃與賽事后勤保障合同模板4篇
- 2025年度廠房施工材料采購(gòu)合同文本4篇
- 二零二五年度排水溝工程智能控制系統(tǒng)集成合同4篇
- 2025年度智能化魚塘承包與養(yǎng)殖技術(shù)支持合同4篇
- 2025年度出租工業(yè)用地并協(xié)助注冊(cè)生產(chǎn)企業(yè)合同范本4篇
- 二零二五年度美容院?jiǎn)T工勞動(dòng)合同示范文本發(fā)布4篇
- 2025年度地下綜合管廊施工合同范本7篇
- 勞務(wù)協(xié)議范本模板
- 2024年全國(guó)職業(yè)院校技能大賽高職組(生產(chǎn)事故應(yīng)急救援賽項(xiàng))考試題庫(kù)(含答案)
- 2025大巴車租車合同范文
- 老年上消化道出血急診診療專家共識(shí)2024
- 人教版(2024)數(shù)學(xué)七年級(jí)上冊(cè)期末測(cè)試卷(含答案)
- 2024年國(guó)家保密培訓(xùn)
- 2024年公務(wù)員職務(wù)任命書3篇
- CFM56-3發(fā)動(dòng)機(jī)構(gòu)造課件
- 會(huì)議讀書交流分享匯報(bào)課件-《殺死一只知更鳥》
- 2025屆撫州市高一上數(shù)學(xué)期末綜合測(cè)試試題含解析
- 《霧都孤兒人物分析4000字(論文)》
評(píng)論
0/150
提交評(píng)論