計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告-局域網(wǎng)截包_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告-局域網(wǎng)截包_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告-局域網(wǎng)截包_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告-局域網(wǎng)截包_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告-局域網(wǎng)截包_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告題目:局域網(wǎng)截包問題描述在一個(gè)局域網(wǎng)環(huán)境中,用C語言實(shí)現(xiàn)下面的基本功能:(1)確定截包的方法:包括RAW模式SOCKET、PACKET以及直接作為驅(qū)動(dòng)程序掛在NDIS上。(2)要求截獲以下包的類型并分析:以IGMP包、ICMP包、TCP報(bào)文段、UDP報(bào)文段等相關(guān)字段進(jìn)行描述。概要設(shè)計(jì)2.1設(shè)計(jì)原理局域網(wǎng)截包作為一種網(wǎng)絡(luò)通訊程序,也是網(wǎng)絡(luò)通過對(duì)網(wǎng)卡的編程來實(shí)現(xiàn)網(wǎng)絡(luò)通訊的,對(duì)網(wǎng)卡的編程也是使用通常的套接字(socket)方式來進(jìn)行。但是實(shí)際上要達(dá)到目的卻不能讓網(wǎng)卡按通常的正常模式工作,而必須將其設(shè)置成為混雜模式。具體到編程實(shí)現(xiàn)上,這種對(duì)網(wǎng)卡混雜模式的設(shè)置是通過原始套接字(rawsocket)來實(shí)現(xiàn)的。先用gethostname()獲取主機(jī)名,然后通過gethostbyname()獲取主機(jī)信息。在創(chuàng)建了原始套接字后,然后再通過bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡。然后通過監(jiān)聽報(bào)文來根據(jù)不同的協(xié)議來調(diào)用相應(yīng)的函數(shù),從而解析得出截得的數(shù)據(jù)包所得的信息。若最初沒有獲取到主機(jī)名或者中途出現(xiàn)數(shù)據(jù)包大小大于定義的buf緩沖區(qū)大小,則輸出錯(cuò)誤,即得不到正確的數(shù)據(jù)包信息。2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)2.2.1IP首部數(shù)據(jù)結(jié)構(gòu):typedefstruct_iphdr{ unsignedcharh_lenver;//4為首部長(zhǎng)度+4位IP版本號(hào) unsignedchartos;//8位服務(wù)類型TOS unsignedshorttotal_len;//16位總長(zhǎng)度(字節(jié)) unsignedshortident;//16位標(biāo)識(shí) unsignedshortfrag_and_flags;//3位標(biāo)志位 unsignedcharttl;//8位生存時(shí)間TTL unsignedcharproto;//8位協(xié)議(TCP,UDP或其他) unsignedshortchecksum;//16位IP首部校驗(yàn)和 unsignedintsourceIP;//32位源IP地址 unsignedintdestIP;//32位目的IP地址}IpHeader;2.2.2TCP首部數(shù)據(jù)結(jié)構(gòu):typedefstruct_tcphdr{ USHORTth_sport;//16位源端口 USHORTth_dport;//16位目的端口 unsignedintth_seq;//32位序列號(hào) unsignedintth_ack;//32位確認(rèn)號(hào) unsignedcharth_lenres;//4位首部長(zhǎng)度/6位保留字 unsignedcharth_flag;//6位標(biāo)志位 USHORTth_win;//16位窗口大小 USHORTth_sum;//16位校驗(yàn)和 USHORTth_urp;//16位緊急數(shù)據(jù)偏移量}TCP_HEADER;2.2.3UDP首部數(shù)據(jù)結(jié)構(gòu):typedefstruct_udphdr{unsignedshortuh_sport;//16位源端口unsignedshortuh_dport;//16位目的端口unsignedshortuh_len;//16位長(zhǎng)度unsignedshortuh_sum;//16位校驗(yàn)和}UDP_HEADER;2.2.4ICMP首部數(shù)據(jù)結(jié)構(gòu):typedefstruct_icmphdr{ BYTEi_type;//8位類型 BYTEi_code;//8位代碼 USHORTi_cksum;//16位校驗(yàn)和 USHORTi_id;//識(shí)別號(hào)(一般用進(jìn)程號(hào)作為識(shí)別號(hào)) USHORTi_seq;//報(bào)文序列號(hào) ULONGtimestamp;//時(shí)間戳}ICMP_HEADER;2.3系統(tǒng)流程圖三、詳細(xì)設(shè)計(jì)3.1獲取主機(jī)地址先用gethostname()獲取主機(jī)名,然后通過gethostbyname()獲取主機(jī)信息具體實(shí)現(xiàn)程序如下:structsockaddr_inaddr;memset(&addr,0,sizeof(addr));charname[256]; PHOSTENThostinfo; if(gethostname(name,sizeof(name))==0) { if((hostinfo=gethostbyname(name))!=NULL) { memcpy(&(addr.sin_addr.S_un.S_addr),(structin_addr*)*hostinfo->h_addr_list,sizeof((structin_addr*)*hostinfo->h_addr_list)); } }3.2創(chuàng)建原始套接字,綁定原始套接字在創(chuàng)建了原始套接字后,然后再通過bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡。具體實(shí)現(xiàn)程序如下:addr.sin_family=AF_INET;if(bind(sock,(structsockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)//bind{ HandleError("bind");}inton=1;DWORDnum;if(WSAIoctl(sock,SIO_RCVALL,&on,sizeof(on),NULL,0,&num,NULL,NULL)==SOCKET_ERROR){ HandleError("wsaIoctlset");}3.3偵聽IP報(bào)文,分析并根據(jù)協(xié)議類型分別調(diào)用相應(yīng)的函數(shù)。具體實(shí)現(xiàn)程序如下:while(timeDuration!=0) { memset(buf,0,sizeof(num)); memset(&from,0,sizeof(from)); fromlen=sizeof(from); size=recvfrom(sock,buf,PACKAGE_SIZE,0,(structsockaddr*)&from,&fromlen); if(size==SOCKET_ERROR) { if(WSAGetLastError()==WSAEMSGSIZE) { HandleError("recvfrom"); continue; } } IPHeader*iph=(IPHeader*)buf; saSource.sin_addr.s_addr=iph->sourceIP; strncpy(szSourceIP,inet_ntoa(saSource.sin_addr),MAX_ADDR_LEN); saDest.sin_addr.s_addr=iph->destIP; strncpy(szDestIP,inet_ntoa(saDest.sin_addr),MAX_ADDR_LEN); iTTL=iph->ttl; intIpHeadLen=4*(iph->h_lenver&0xf); switch(iph->proto) { caseIPPROTO_ICMP:DecodeIcmpPack(buf+IpHeadLen,size,fp);break; caseIPPROTO_IGMP: printf("IGMP"); printf("%15s:->%15s:",szSourceIP,szDestIP); printf("%d",size); printf("%s\n",buf); break; caseIPPROTO_TCP:DecodeTcpPack((buf+IpHeadLen),size,fp);break; caseIPPROTO_UDP:DecodeUdpPack(buf+IpHeadLen,size,fp);break; default: printf("unknowndatagramfrom%s\n",inet_ntoa(from.sin_addr)); printf("%s\n",buf); break; } Sleep(1000); timeDuration--; closesocket(sock); WSACleanup(); printf("監(jiān)聽完成,以上為監(jiān)聽到的數(shù)據(jù)\n");//getch(); return0;四、調(diào)試分析4.1測(cè)試中遇到的問題(1)不顯示結(jié)果。因?yàn)楹瘮?shù)調(diào)用出現(xiàn)問題。(2)監(jiān)聽時(shí)間出現(xiàn)錯(cuò)誤。因?yàn)閟leep設(shè)置問題。(3)recvfrom出現(xiàn)錯(cuò)誤。因?yàn)榫彌_區(qū)過小。4.2測(cè)試結(jié)果經(jīng)反復(fù)調(diào)試,運(yùn)行正常,運(yùn)行結(jié)果如下:五、心得體會(huì)通過此次課程設(shè)計(jì),我們將之前所學(xué)理論與這次的實(shí)踐相結(jié)合,使我們對(duì)TCP、UDP、ICMP、IGMP協(xié)議有了更深入的了解,加深了對(duì)計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)的理解和掌握,計(jì)算機(jī)網(wǎng)絡(luò)的可實(shí)性、可視性、可優(yōu)化性通過界面很好的表現(xiàn)出

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論