計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包的捕獲與分析_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包的捕獲與分析_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包的捕獲與分析_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包的捕獲與分析_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包的捕獲與分析_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

SOUTHUNIVERSITY計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告

目錄第一章課程設(shè)計(jì)的目的與要求..........................錯(cuò)誤!未定義簽。1.1課程設(shè)計(jì)的目的...................................錯(cuò)誤未定義簽。1.2課程設(shè)計(jì)的要求....................................................1第二章課程設(shè)計(jì)的內(nèi)容.................................................32.1課程設(shè)計(jì)的內(nèi)容....................................................32.2內(nèi)容的要求........................................................3第三章程序分析與設(shè)計(jì).................................................43.1IP數(shù)據(jù)..........................................................43.1.1IP數(shù)據(jù)包的格式說明..........................................43.1.2IP數(shù)據(jù)包的格式..............................................43.1.3IP數(shù)據(jù)包的C++定...........................................53.1.4IP數(shù)據(jù)包的解析..............................................63.2套接字............................................................73.1.4套接字的使.................................................73.1.4使用原始套接...............................................73.3接受數(shù)據(jù)包........................................................7第四章驗(yàn)結(jié).......................................................104.1程序截圖.........................................................10第五章總結(jié)..........................................................115.1實(shí)驗(yàn)心得.........................................................11第六章附錄..........................................................126.1源代碼...........................................................12

第一章課程設(shè)計(jì)的的與要求課程設(shè)計(jì)的目的計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)的目的,是為了讓學(xué)生更深入地掌握計(jì)算機(jī)網(wǎng)絡(luò)的核心內(nèi)容,實(shí)現(xiàn)理論與實(shí)踐相結(jié)合。讓學(xué)生用具體的實(shí)踐成果,體現(xiàn)對理論知識的掌握程度。有利于學(xué)生提高計(jì)算機(jī)網(wǎng)絡(luò)的實(shí)踐能力,加深對計(jì)算機(jī)網(wǎng)絡(luò)理論知識的理解。課程設(shè)計(jì)的要求(1)編寫程序,實(shí)現(xiàn)系統(tǒng)的基本功能,鼓勵自行增加新功能;(2)要有用戶界面:要求至少采用文本菜單界面;鼓勵采用圖形菜單界面;(3)寫課程設(shè)計(jì)報(bào)告,內(nèi)容包括:

封面(參見附錄I)需求分析以無歧義的陳述說明程序設(shè)計(jì)的任務(wù)強(qiáng)調(diào)的是程序要做什么?給出功能模塊圖和流程圖同時(shí)明確規(guī)定入的形式和輸出值的范圍輸出的形式;程序所能夠達(dá)到的功能測試數(shù)據(jù)包括正確的輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果。概要設(shè)計(jì):包括程序設(shè)計(jì)組成框圖序中使用的存儲結(jié)構(gòu)設(shè)計(jì)說明(如果指定存儲結(jié)構(gòu)請寫出該存儲結(jié)構(gòu)的定義)。詳細(xì)設(shè)計(jì):包括模塊功能說明(如函數(shù)功能、入口及出口參數(shù)說明,函數(shù)調(diào)用關(guān)系描述等),每個(gè)模塊的算法設(shè)計(jì)說明(可以是描述算法的流程圖)。其中源程序要按照寫程序的規(guī)則來編寫結(jié)構(gòu)清晰,重點(diǎn)函數(shù)的重點(diǎn)變量,重點(diǎn)功能部分要加上清晰的程序注釋。運(yùn)行結(jié)果:包括典型的界面、輸入和輸出數(shù)據(jù)等;總結(jié):包括課程設(shè)計(jì)中遇到的問題,解決問題的過程及體會、收獲、對課程設(shè)計(jì)的認(rèn)識與思考等。附錄:包括主要程序清單,要有適當(dāng)?shù)淖⑨?,使程序容易閱讀。(4)課程設(shè)計(jì)報(bào)告書寫規(guī)范參見附錄II,不按照規(guī)范書寫的,成績不能評為“優(yōu)”或“良”。(5)無論在校外、校內(nèi),都要嚴(yán)格遵守學(xué)校和所在單位的學(xué)習(xí)和勞動紀(jì)律、11

規(guī)章制度,學(xué)生有事離校必須請假。課程設(shè)計(jì)期間,無故缺席按曠課處理;缺席時(shí)間達(dá)四分之一以上者,其成績按不及格處理。2

第二章課程設(shè)計(jì)的容課程設(shè)計(jì)的內(nèi)容本次實(shí)驗(yàn)的要求在網(wǎng)絡(luò)環(huán)境,使用寫程序?qū)崿F(xiàn)捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。內(nèi)容的要求(1)以命令行形式運(yùn)行(應(yīng)如程序+數(shù)名logfile其中ipparse是程序名,而logfile為該程序所帶參數(shù),其代表記錄結(jié)果的日志文件。(2)在標(biāo)準(zhǔn)輸出和日志文件中寫入捕獲的的版本、頭長度、服務(wù)類型、數(shù)據(jù)包總長度、數(shù)據(jù)包標(biāo)識、分段標(biāo)志、分段偏移值、生存時(shí)間、上層協(xié)議類型、頭校驗(yàn)和、源IP地址和目的IP地址等內(nèi)容。(3)當(dāng)程序接收到鍵盤輸入Ctrl+C時(shí)退出。3

第三章程序設(shè)計(jì)與析IP數(shù)3.1.1IP數(shù)據(jù)包的格式說明IP數(shù)據(jù)包格式包含了標(biāo)頭固定部分,標(biāo)頭可變部分和數(shù)據(jù)區(qū)三部分IP數(shù)據(jù)報(bào)標(biāo)頭部分固定為20個(gè)字節(jié),其中包含了12個(gè)參數(shù)域,各參數(shù)域隱含著網(wǎng)間協(xié)議的傳輸機(jī)制。IP具體的標(biāo)頭格式如圖1所示。各參數(shù)域的具體含義如下:1)版本號長度4位表示所使用的協(xié)議的版本IPv4版本號字段值為4IPV6版本號字段號的值為6.2)標(biāo)頭長:長度4位,定義了一個(gè)以為一個(gè)單位的IP包的報(bào)頭長度3)服務(wù)類型:共8位,高3位組成優(yōu)先級子域,隨后位組成服務(wù)類型子域。4)數(shù)據(jù)報(bào)總長度總長度為(即6位了以字節(jié)為單位的數(shù)據(jù)報(bào)的總長度。5)重裝標(biāo)識長度16用于識別IP數(shù)據(jù)報(bào)的編號讓目的主機(jī)判斷新來的數(shù)據(jù)屬于哪個(gè)分組。6)分片標(biāo)識:共3位,最高位為0;DF禁分片標(biāo)識DF=0,可以分片DF=1,不能分片。MF:分片標(biāo)識。MF=0,表示接的是最后一個(gè)分片;MF=1,不是最后一個(gè)分片。7)片偏移值:共13位,說明分片在整個(gè)數(shù)據(jù)報(bào)中的相對位置。8)生存周期:8位,用來設(shè)置數(shù)據(jù)數(shù)據(jù)報(bào)在整個(gè)網(wǎng)絡(luò)傳輸過程中的壽命。常以一個(gè)數(shù)據(jù)報(bào)可以經(jīng)過的最多的路由器跳步數(shù)來控制。9)協(xié)議類型:共8位,表示該IP據(jù)報(bào)的高層協(xié)議類型。10)標(biāo)頭校驗(yàn)和:共16位,用于存放檢查報(bào)頭錯(cuò)誤的校驗(yàn)碼。11)源、宿主機(jī)地址:32,分別表示發(fā)送和接受數(shù)據(jù)報(bào)的源主機(jī)和宿主機(jī)的IP地址。選項(xiàng)數(shù)據(jù)域:0-40B,用于控制和測試3.1.2IP數(shù)據(jù)包的格式4

4位版本

4位首部長8位服務(wù)類型度16位標(biāo)識

3位標(biāo)志

16位總長(字為單位)13位片偏移8位生存時(shí)間(TTL)

8位協(xié)議

16位首部檢和32I地址32位目地址3.1.3IP數(shù)據(jù)包的C++定義typedefstruct_IP{union{BYTEVersion;//版本BYTEHdrLen;//IHT};BYTEServiceType;//服務(wù)類型WORDTotalLen;//總長WORDID;//標(biāo)識union{WORDFlags;//標(biāo)志W(wǎng)ORDFragOff;//分段偏移};BYTETimeToLive;//生命期BYTEProtocol;//協(xié)議WORDHdrChksum;//頭校驗(yàn)和DWORDSrcAddr;//源地址DWORDDstAddr;//目的地址BYTEOptions;//選項(xiàng)}IP;5

3.1.4IP數(shù)據(jù)包的解析通過IP_HEADER解析IP頭各個(gè)字段的代碼:/*獲取版本字段*/ip.Version>>4;/*獲取頭部長度字段*/ip.HdrLen&0x0f;/*獲取服務(wù)類型字段中的優(yōu)先級子域*/ip.ServiceType>>5;/*獲取服務(wù)類型字段中的TOS子域*/(ip.ServiceType>>1)&0x0f;/*獲取總長度字段*/ip.TotalLen;/*獲取標(biāo)識字段*/ip.ID;/*解析標(biāo)志字段*/DF=(ip.Flags>>14)&0x01;MF=(ip.Flags>>13)&0x01;/*獲取分段偏移字段*/ip.FragOff&0x1fff;/*獲取生存時(shí)間字段*/ip.TimeToLive;/*獲取協(xié)議字段*/ip.Protocol;/*獲取頭校驗(yàn)和字段*/ip.HdrChksum;/*解析源IP地址字段*/inet_ntoa(*(in_addr*)&ip.SrcAddr);/*解析目的IP地址字段*/inet_ntoa(*(in_addr*)&ip.DstAddr);6

套接字3.2.1套接字的使用本程序使用套接字socket編程將網(wǎng)卡設(shè)為能夠接受流經(jīng)網(wǎng)卡的所有類型的數(shù)據(jù)包。首先,初始化套接字,然后監(jiān)聽數(shù)據(jù)包,解析數(shù)據(jù)包。SOCKETsock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用來創(chuàng)建套接字,其參數(shù)為通信發(fā)生的區(qū)字段和套接字的類型。WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen)函數(shù)用來把網(wǎng)卡設(shè)置為混雜模式。recv(sock,buffer,65535,0)函數(shù)用來接收經(jīng)過的包,其參數(shù)分別是套接字描述符,緩沖區(qū)的地址,緩沖區(qū)的大小。3.2.1使用原始套接字要進(jìn)行IP層數(shù)據(jù)包的接收和發(fā)送,應(yīng)使用原始套接字。創(chuàng)建原始套接字的代碼如下:SOCKETsock;sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);在WSASoccket函數(shù)中,第一個(gè)參數(shù)指定通信發(fā)生的區(qū)字段,針對Internet的,允許在遠(yuǎn)程主機(jī)之間通信。第二個(gè)參數(shù)是套接字的類型,在地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW種套接字類型。在這里,設(shè)置為SOCK_RAW表示聲明的是一個(gè)原始套接字類型第三個(gè)參數(shù)依賴于第二個(gè)參數(shù),用于指定套接字所有的特定協(xié)議使協(xié)議四個(gè)參數(shù)WSAPROTOCOL_INFO位,該位可以置空。第五個(gè)參數(shù)保留,永遠(yuǎn)置。第六個(gè)參數(shù)是標(biāo)志位,WSA_FLAG_OVERLAPPED表明可以使用發(fā)送接收超時(shí)設(shè)置。創(chuàng)建原始套接字后IP頭就會包含在接收的數(shù)據(jù)中。然后,可以設(shè)置IP頭操作選項(xiàng),調(diào)setsockopt函數(shù)。其中flag置為true,并設(shè)IP_HDRINCL選項(xiàng),表明用戶可以親自對IP頭進(jìn)行處理。BOOLflag=true;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag));之后,使用如下代碼完成對socket的初始化工作:7

/*獲取主機(jī)名*/charhostName[128];gethostname(hostName,100);/*獲取本地IP地址*/hostent*pHostIP;pHostIP=gethostbyname(hostName);/*填充SOCKADDR_IN結(jié)構(gòu)的內(nèi)容*/sockaddr_inaddr_in;addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0];addr_in.sin_family=AF_INET;addr_in.sin_port=htons(6000);/*綁定socket*/bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in));填寫sockaddr_in的內(nèi)容時(shí),其地址值應(yīng)填寫為本機(jī)地址,本機(jī)地址可以通過gethostbyname()函數(shù)獲取端口號可以隨便填寫,但不能與系統(tǒng)沖突;協(xié)議族應(yīng)填為AF_INET。使htons()函數(shù)可以將無符號短整型的主機(jī)數(shù)據(jù)轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序的數(shù)據(jù)。最后使用bind(0函數(shù)將socket定到本機(jī)網(wǎng)卡上。綁定網(wǎng)卡后,需要用WSAIoctl()函數(shù)把網(wǎng)卡設(shè)置為混雜模式,使網(wǎng)卡能夠接收所有網(wǎng)絡(luò)數(shù)據(jù),其關(guān)鍵代碼如下:#defineSIO_RCVALL_WSAIOW(IOC_VENDOR,1)DWORDdwBufferLen[10];DWORDdwBufferInLen=1;DWORDdwBytesReturned=0;WSAIoct1(SnifferSocket,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);如果接收的數(shù)據(jù)包中的協(xié)議類型和定義的原始套接字匹配,那么接收到的數(shù)據(jù)就拷貝到套接字中。因此,網(wǎng)卡就可以接收所有經(jīng)過的包。接收數(shù)據(jù)包8

在程序中可使用recv()函數(shù)接收經(jīng)過的包。該函數(shù)有四個(gè)參數(shù),第一個(gè)參數(shù)接收操作所用的套接字描述符;第二個(gè)參數(shù)接收緩沖區(qū)的地址;第三個(gè)參數(shù)接收緩沖區(qū)的大小,也就是所要接收的字節(jié)數(shù);第四個(gè)參數(shù)是一個(gè)附加標(biāo)志,如果對所發(fā)送的數(shù)據(jù)沒特殊要求,直接設(shè)為0。因?yàn)镮P據(jù)包的最大長度是65535B,因此,緩沖區(qū)的大小不能小于65535B。設(shè)置緩沖區(qū)后,可利用循環(huán)來反復(fù)監(jiān)聽接收包,用RECV()函數(shù)實(shí)現(xiàn)接收功能的代碼如下:#defineBUFFER_SIZE65535charbuffer[BUFFER_SIZE];//置緩沖區(qū)while(true){recv(sock,buffer,BUFFER_SIZE,0);//收數(shù)據(jù)包/*然后是解析接收的IP包*/}9

第四章實(shí)驗(yàn)結(jié)果程序截圖10

第五章總結(jié)通過這次課程設(shè)計(jì),我們了解到關(guān)于計(jì)算機(jī)網(wǎng)絡(luò)數(shù)據(jù)傳送及處理過程中,軟件起到了巨大的作用。熟悉了C++語言在計(jì)算機(jī)網(wǎng)絡(luò)方面的應(yīng)用,是一次難得的機(jī)會。此外,我還了解了網(wǎng)絡(luò)通信協(xié)議的基本工作原理及套接字的使用,雖然剛開始的時(shí)候比較模糊,但是通過與同學(xué)共同探討和網(wǎng)上查閱資料,最終我成功完成了實(shí)驗(yàn)。這次課程設(shè)計(jì)培養(yǎng)了我們基本掌握網(wǎng)絡(luò)編程的基本思路和方法,讓我們懂得如何去學(xué)習(xí)這類東西。同時(shí)提高我們對所學(xué)計(jì)算機(jī)網(wǎng)絡(luò)理論知識的理解能力,提高和挖掘我們對所學(xué)知識的實(shí)際應(yīng)用能力和創(chuàng)新能力。同學(xué)們的合作是實(shí)驗(yàn)成功的必要條件,而謹(jǐn)慎對待事物的態(tài)度是成功的關(guān)鍵。11

第六章附錄源代碼<stdio.h><iostream.h>comment(lib,"Ws2_32.lib")BUFFER_SIZE65535IO_RCVALL_WSAIOW(IOC_VENDOR,1)_IP_HEADER//定義IP{union{BYTEVersion;//本(前位)BYTEHdrLen;//報(bào)頭標(biāo)長(后位IP頭長度};BYTEServiceType;//務(wù)類型//數(shù)據(jù)報(bào)總長ID;//標(biāo)識union{//識(前位)//段偏移(后位)};BYTE//存周期BYTEProtocol;//協(xié)議//頭校驗(yàn)和DWORDSrcAddr;//源地址DWORDDstAddr;//地地址BYTE//項(xiàng)}IP_HEADER;*b){//取服務(wù)類型字段中優(yōu)先級子域{7:"NetworkControl";//網(wǎng)絡(luò)控制break;6:workControl";//網(wǎng)絡(luò)控制break;5:12

"CRITIC/ECP";break;4:"Flash//優(yōu)先信號break;3:"Flsah";break;2:"Immediate";break;1://議break;0://由break;default:"Unknow";break;}}*b){b=(b>>1)&0x0f;//獲取服務(wù)類型字段中的TOS子域switch(b){0:"Normal//正常運(yùn)行break;1:"Minimizecost";//本break;2:"Maximize//靠性break;4:"Maximize//吐量break;8:"Minimizedelay";//延遲break;15:"Maximizesecurity";//安全性break;13

default:"Unknow";}}*Protocol)//獲取協(xié)議字段共8{switch(Protocol)//以下為協(xié)議號說明{1:控報(bào)文協(xié)議2:組管理協(xié)議4:"IPIP";//動IP數(shù)據(jù)封裝和隧道6:"TCP";//傳輸控制協(xié)議8:"EGP";//部網(wǎng)關(guān)協(xié)議17:"UDP";//戶數(shù)據(jù)報(bào)文協(xié)議41:"IPv6";46://源預(yù)留協(xié)議89:"OSPF";First開發(fā)式最短路徑優(yōu)先default:"UNKNOW";}}file,char*buffer){IP_HEADERip=*(IP_HEADER*)buffer;//通過指針把緩沖區(qū)的內(nèi)容強(qiáng)制轉(zhuǎn)化為IP_HEADER數(shù)據(jù)結(jié)構(gòu)fprintf(file,"_______________________________________________\r\n");fprintf(file,"版本號:IPV%d\r\n",ip.Version>>4);fprintf(file,"報(bào)頭標(biāo)長:(BYTE)\r\n",((ip.HdrLen&0x0f)*4));fprintf(file,"

服務(wù)器類型:%s,%s\r\n",parseServiceType_getProcedence(ip.ServiceType),fprintf(file,"總長度fprintf(file,"標(biāo)識:fprintf(file,"標(biāo)志位DF:,MF=%d\r\n",((ip.Flags>>14)&0x01),((ip.Flags>>13)&0x01));14

fprintf(file,"分段偏移值:%d\r\n",(ip.FragOff&0x1fff));fprintf(file,"生存期:%d(hops)\r\n",ip.TimeToLive);fprintf(file,"協(xié)議:%s\r\n",getProtocol(ip.Protocol));fprintf(file,"頭校驗(yàn)和0x%0x\r\n",ip.HdrChksum);fprintf(file,"源址:fprintf(file,"目的IP址:%s\r\n",inet_ntoa(*(in_addr*)&ip.DstAddr));}int{FILE*file;{printf("failopenfile%s");-1;}rv;WSAData;//義了能夠儲存調(diào)用返回值的結(jié)構(gòu)rv=MAKEWORD(2,2);本W(wǎng)SAStartup(rv,&WSAData);//創(chuàng)建套接字sock為套接字描述符BOOLsetsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag));//意類型、任意狀態(tài)套接口的設(shè)置選項(xiàng)值hostName[128];//獲取主機(jī)名*//取本地地址=gethostbyname(hostName);sockaddr_inaddr_in.sin_family=AF_INET;addr_in.sin_port=

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論