計算機網(wǎng)絡課程設計-IP數(shù)據(jù)包解析實驗報告_第1頁
計算機網(wǎng)絡課程設計-IP數(shù)據(jù)包解析實驗報告_第2頁
計算機網(wǎng)絡課程設計-IP數(shù)據(jù)包解析實驗報告_第3頁
計算機網(wǎng)絡課程設計-IP數(shù)據(jù)包解析實驗報告_第4頁
計算機網(wǎng)絡課程設計-IP數(shù)據(jù)包解析實驗報告_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

解析IP數(shù)據(jù)報實驗報告目錄TOC\o"1-5"\h\z\o"CurrentDocument"目錄 2\o"CurrentDocument"1、 課程設計目的 2\o"CurrentDocument"2、 課程設計要求 2\o"CurrentDocument"3、 相關(guān)知識 2\o"CurrentDocument"4、 課程設計分析 6\o"CurrentDocument"網(wǎng)卡設置 6\o"CurrentDocument"使用套接字 7\o"CurrentDocument"接收數(shù)據(jù)包 7\o"CurrentDocument"定義IP頭部的數(shù)據(jù)結(jié)構(gòu) 8IP包的解析 9協(xié)議的定義 9捕獲處理 9\o"CurrentDocument"5、 運行結(jié)果 10\o"CurrentDocument"6、 總結(jié) 11\o"CurrentDocument"7、 課程設計參考資料 11\o"CurrentDocument"8、 源程序代碼 111、課程設計目的本課程設計的目的就是設計一個解析IP數(shù)據(jù)包的程序,并根據(jù)這個程序,說明IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問題,從而對IP層的工作原理有更好的理解和認識。2、 課程設計要求本設計的目標是捕獲網(wǎng)絡中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標準輸出上,并同時寫入日志文件。程序的具體要求如下:1) 以命令行形式運行:ipparselogfile,其中ipparse是程序名,而logfile則代表記錄結(jié)果的日志文件。2) 在標準輸出和日志文件中寫入捕獲的IP包的版本、頭長度、服務類型、數(shù)據(jù)包總長度、數(shù)據(jù)包標識、分段標志、分段偏移值、生存時間、上層協(xié)議類型、頭校驗和、源IP地址和目的IP地址等內(nèi)容。3) 當程序接收到鍵盤輸入Ctrl+C時退出。3、 相關(guān)知識互聯(lián)網(wǎng)絡層是TCP/IP協(xié)議參考模型中的關(guān)鍵部分.IP協(xié)議把傳輸層送來的消息組裝成IP數(shù)據(jù)包,并把IP數(shù)據(jù)包傳送給數(shù)據(jù)鏈層.IP協(xié)議在TCP/IP協(xié)議族中處于核心地位,IP協(xié)議制定了統(tǒng)一的IP數(shù)據(jù)包格式,以消除個通信子網(wǎng)中的差異,從而為信息發(fā)送方和接收方提供了透明的傳輸通道.編制本程序前,首先要對IP包的格式有一定了解,圖1給出了IP協(xié)議的數(shù)據(jù)包格式.IP數(shù)據(jù)包的第一個字段是版本字段,其度是4位,表示所使用的IP協(xié)議的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要針對版本是IPV4的數(shù)據(jù)包的解析.報頭標長字段為4位,它定義了以4B為一個單位的IP包的報文長度.報頭中除了選項字段和填充域字段外,其他各字段是定長的.因此,IP數(shù)據(jù)包的頭長度在20—40B之間,是可變的.0 4 8 16 19 24 31版本報頭標長 服務類型總長度標識【標志片偏移生存時間協(xié)議頭校驗和源IP地址目的IP地址選項[填充域數(shù)據(jù)部分圖1IP數(shù)據(jù)包的格式服務類型字段共8位,用于指示路由器如何處理該數(shù)據(jù)包.該字段長度由4位服務

類型(TOS)子域和3位優(yōu)先級子域組成,1位為保留位,該字段結(jié)構(gòu)如圖2所示.B7b6b5b4 b3 b2 b1 b0優(yōu)先級DTRC0圖2服務類型字段結(jié)構(gòu)優(yōu)先級共有8種,優(yōu)先級越高表明數(shù)據(jù)包越重要.表1中列出了各種優(yōu)先級所代表的意義.表一優(yōu)先子域的說明位數(shù)(b7b6b5)意義111網(wǎng)絡控制110網(wǎng)絡間控制101重要(CRITIC/ECP)100即時,優(yōu)先011即時010立刻001優(yōu)先000普通在4位服務類型子域中b4,b3,b2,b1分別表示D(延遲),T(吞吐量),R(可靠性)

與C(成本)?表2列出了服務器類型自域的構(gòu)成.意義1111安全級最咼1000延遲最小0100吞吐量最大0001金錢成本最小0000普通服務總長度字段為2B,它定義了以字節(jié)為單位的數(shù)據(jù)包的總長度.IP數(shù)據(jù)包的最大長度為意義1111安全級最咼1000延遲最小0100吞吐量最大0001金錢成本最小0000普通服務總長度字段為2B,它定義了以字節(jié)為單位的數(shù)據(jù)包的總長度.IP數(shù)據(jù)包的最大長度為65535B.標識字段的長度為16位,用于識別IP數(shù)據(jù)包的編號.每批數(shù)據(jù)都要有一個標識值,用于讓目的主機判斷新來的數(shù)據(jù)屬于哪個分組.報頭中的標志字段如圖7-3所示.標志字段共3位,最高位是0.禁止分片標志DF(donotfragment)字段的值若為1,表示不能對數(shù)據(jù)包分片;若DF值為0,則表明可以分片?分片標志MF(morefragment)的值為1,表示接收到的不是最后一個分片;若MF值為0,表示接收到的是最后一個分片.片偏移字段共13位,說明分片在整個數(shù)據(jù)包中的相對位置.片偏移值是以8B為單位來記數(shù)的,因此選擇的分片長度應該是8B的整數(shù)倍.生存時間(TTL)字段為8位,用來設置數(shù)據(jù)包在互聯(lián)網(wǎng)絡的傳輸過程的壽命,通常是用一個數(shù)據(jù)包可以經(jīng)過的最多的路由器跳步數(shù)來限定的.協(xié)議字段為8位,表示使用此IP數(shù)據(jù)包的高層協(xié)議類型,常用的協(xié)議號如表3所示.序號協(xié)議名稱序號協(xié)議名稱1ICMP2IGMP4IPinIP6TCP8EGP%序號協(xié)議名稱17UDP41IPV6—RSVP46OSPFA89表3典型的協(xié)議號頭校驗和字段為16位,用于存放檢查報頭錯誤的校驗碼。檢驗的范圍是整個IP包的報頭。校驗和按如下方法計算:1) 將頭校驗和的字段置為0。2) 將報頭部分的所有數(shù)據(jù)以16位為單位進行累加,累加方式是求異或。3) 將累加的結(jié)果取反碼,就是頭校驗和。當收到一個IP包時,要檢查報頭是否出錯,就把報頭中的所有數(shù)據(jù)以16位為單位進行累加,若累加的結(jié)果為0,則報文沒有出錯。地址字段包括源地址和目的地址。源地址和目的地址的長度都是32位,分別表示發(fā)送數(shù)據(jù)包的源主機和目的主機的IP地址。選項字段的長度范圍為0~40B,主要用于控制和測試。在使用選項字段的過程中,有可能出現(xiàn)報頭部分的長度不是32位的整數(shù)倍的情況。如果出現(xiàn)這種情況,就需要通過填充位來湊齊。4、課程設計分析}網(wǎng)卡設置為了獲取網(wǎng)絡中的IP數(shù)據(jù)包,必須對網(wǎng)卡進行編程,在這里使用套接字(socket)進行編程。但是,在通常情況下,網(wǎng)絡通信的套接字程序只能響應與自己硬件地址相匹配的數(shù)據(jù)包或是以廣播形式發(fā)出的數(shù)據(jù)包。對于其他形式的數(shù)據(jù)包,如已到達網(wǎng)絡接口,但卻不是發(fā)送到此地址的數(shù)據(jù)包,網(wǎng)絡接口在騅投遞地址并非自身地址之后將不引起響應,也就是說應用程序無法收取與自己無關(guān)的數(shù)據(jù)包。我們要想獲取網(wǎng)絡設備的所有數(shù)據(jù)包,就是需要將網(wǎng)卡設置為混雜模式。使用套接字套接字分為三種,即流套接字(Streamsocket)、數(shù)據(jù)報套接字(DatagramSocket)和原始套接字(RawSocket)。要進行IP層數(shù)據(jù)包的接收和發(fā)送,應使用原始套接字。創(chuàng)建原始套接字的代碼如下:Socketsock;sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);本設計不用考慮超時情況。創(chuàng)建套接后,IP頭就會包含在接收數(shù)據(jù)包中。然后,我可以設置IP頭操作選項,調(diào)用setsockopt函數(shù)。其中flag設置為true,并設定IP-HDRINCL選項,表明用戶可以親自對IP頭進行處理。最后使用bind()函數(shù)將socket綁定到本地網(wǎng)卡上。綁定網(wǎng)卡后,需用WSAIoctl()函數(shù)把網(wǎng)卡設置為混雜模式,使網(wǎng)卡能夠接收所有的網(wǎng)絡數(shù)據(jù)。如果接收的數(shù)據(jù)包中的協(xié)議類型和定義的原始套接字匹配,那么接收的數(shù)據(jù)就拷貝到套接字中,因此,網(wǎng)卡就可以接收所有經(jīng)過的IP包。接收數(shù)據(jù)包在程序中可使用recv()函數(shù)接收經(jīng)過的IP包。該函數(shù)有四個參數(shù),第一個參數(shù)接收操作所用的套接字描述符;第二個參數(shù)接收緩沖區(qū)的地址;第三個參數(shù)接收緩沖區(qū)的大小,也就是所要接收的字節(jié)數(shù);第四個參數(shù)是一個附加標志,如果對所發(fā)送的數(shù)據(jù)沒特殊要求,直接設為0。因為IP數(shù)據(jù)包的最大長度是65535B,因此緩沖區(qū)的大小不能小于65535B。設置緩沖區(qū)后,可利用循環(huán)來反復監(jiān)聽接收IP包,用recv()函數(shù)實現(xiàn)接收功能。定義IP頭部的數(shù)據(jù)結(jié)構(gòu)程序需要定義一個數(shù)據(jù)結(jié)構(gòu)表示IP頭部。其代碼如下:/*定義IP頭部數(shù)據(jù)結(jié)構(gòu)*/typedefstruct_IP_HEADER{union{BYTEVersion;載Winsock;]創(chuàng)建一個接收原始IP包的socket連接;綁定到一個接口;4?進行WSAIoctl設置,接收所有的IP數(shù)據(jù)包。代碼如下:if(WSAIoctl(s,dwIoControlCode,&optval,sizeof(optval),NULL,0,&dwBytesRet,NULL,NULL)==S0CKET_ERR0R)5.接著設定一個線程進行捕獲:創(chuàng)建一個接收IP包的鏈表頭;設置一個標識,為真,則不斷進行IP包的捕獲;建立一個新的結(jié)點,將捕獲的數(shù)據(jù)包加入到該結(jié)點;如果鏈表的長度達到指定的長度,創(chuàng)建一個線程對該鏈表的IP包進行解析;再設置一個在IP數(shù)據(jù)包鏈表不足給定的長度,而又中止IP捕獲時,對鏈表的處理;為下一個IP包鏈表創(chuàng)建一個鏈表頭。6?建立一個進行IP包解析并顯示的線程,進行解析IP數(shù)據(jù)包,然后顯示IP數(shù)據(jù)包。5、運行結(jié)果截獲IP數(shù)據(jù)包程序運行結(jié)果如下:

D:\Backup\找旳3<t3\UC+Hostname=smileIPAddress:10.15.48.16seruicelocffile^fl=fc4<hops>biS>uDPD:\Backup\找旳3<t3\UC+Hostname=smileIPAddress:10.15.48.16seruicelocffile^fl=fc4<hops>biS>uDP啓校驗fl=0xf7d8MJlP±teilll=10-15.48.16自的if地址=陽.172.yu.iyur-酉卡I-n川『墨聽一、版盂數(shù)數(shù)分八一I=?度=2型長ID志FrVJ,r-5-7J-71T-28/13045=0t41'df=版本=IPD4快卡度=20<BVTE>6、總結(jié)這次計算機網(wǎng)絡課程設計是解析ip數(shù)據(jù)包,通過這次上機充分應用了所學的計算機網(wǎng)絡和C語言的知識,并上網(wǎng)搜索一部分相當資料,粗略設計出該程序。通過本次課程設計,充分運用了所學的計算機網(wǎng)絡知識,設計出了如何解析IP數(shù)據(jù)包,從而更加深刻的了解到了IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問題,從而對IP層的工作原理有更好的理解和認識。在課程設計的過程也碰到的不少問題。該程序也存在著不少的缺陷,比如并不是所有的數(shù)據(jù)包都能捕獲,如:P數(shù)據(jù)包以外的數(shù)據(jù)包都抓不到;只支持ICMP、IGMP、TCP、UDP這些協(xié)議。|7、課程設計參考資料《計算機網(wǎng)絡(第5版)》主編:謝希仁出版社:電子工業(yè)出版社出版時間:2009年11月《數(shù)據(jù)通信與網(wǎng)絡(第四版)》吳時霖周正康吳永輝譯8、源程序代碼#include#include#include#include#pragmacomment(lib,"")#defineIO_RCVALL_WSAIOW(IOC_VENDOR,1)#defineBUFFER_SIZE65535/*定義IP頭部數(shù)據(jù)結(jié)構(gòu)*/typedefstruct_IP_HEADER{《union{BYTEVersion;.\r\n");fprintf(file,"==================================\r\n");fprintf(file,"描述:%s\r\n",;fprintf(file,"狀態(tài):%s\r\n",;fprintf(file,"==================================\r\n");SOCKETsock;#/*創(chuàng)建原始套接字*/if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET){printf("Cannotcreatesocket!\n");return-1;BOOLflag=true;/*設置IP頭操作選項*/|if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag))==SOCKET_ERROR){printf("setsockoptfailed!\n");return-1;}charhostName[128];/*獲取本地主機名*/if(gethostname(hostName,100)==SOCKET_ERROR){(printf("gethostnamefailed!\n");return-1;}hostent*pHostIP;/*根據(jù)主機名獲取主機信息*/if((pHostIP=gethostbyname(hostName))==NULL){printf("gethostbynamefailed!\n");》return-1;}printf("Hostname:%s\r\n",pHostIP->h_name);printf("IPAddress:%s\r\n",inet_ntoa(*((structin_addr*)pHostIP->h_addr)));/*封裝IP地址信息*/sockaddr_inaddr_in;=*(in_addr*)pHostIP->h_addr_list[0];=AF_INET;=htons(6000);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論