版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 解析IP數(shù)據(jù)包任務(wù)目的:設(shè)計(jì)一個(gè)解析IP數(shù)據(jù)包的程序,并根據(jù)這個(gè)程序,說(shuō)明IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問(wèn)題,從而IP層的工作原理有更好的理解和認(rèn)識(shí)。任務(wù)要求:本實(shí)驗(yàn)的目標(biāo)是捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,見(jiàn)個(gè)結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫(xiě)入日志文件。程序的具體要求如下: 以命令行形式運(yùn)行:ipparselogfile,其中ipparse是程序名,而logfile則代表記錄結(jié)果的日志文件。 在標(biāo)準(zhǔn)輸出、和日志文件中寫(xiě)入捕獲的IP包的版本、頭長(zhǎng)度、服務(wù)類(lèi)型、數(shù)據(jù)包總長(zhǎng)度、數(shù)據(jù)包標(biāo)識(shí)、分段標(biāo)志、分段偏移值、生存時(shí)間、上層協(xié)議類(lèi)型、頭校驗(yàn)和、源IP地址和目的IP地址等內(nèi)容。 當(dāng)程序接收
2、到鍵盤(pán)輸入Ctrl+C時(shí)退出。設(shè)計(jì)相關(guān)知識(shí):互聯(lián)網(wǎng)絡(luò)層是TCP/IP協(xié)議參考模型中的關(guān)鍵部分.IP協(xié)議把傳輸層送來(lái)的消息組裝成IP數(shù)據(jù)包,并把IP數(shù)據(jù)包傳送給數(shù)據(jù)鏈層.IP協(xié)議在TCP/IP協(xié)議族中處于核心地位,IP協(xié)議制定了統(tǒng)一的IP數(shù)據(jù)包格式,以消除個(gè)通信子網(wǎng)中的差異,從而為信息發(fā)送方和接收方提供了透明的傳輸通道.編制本程序前,首先要對(duì)IP包的格式有一定了解,圖1給出了IP協(xié)議的數(shù)據(jù)包格式.IP數(shù)據(jù)包的第一個(gè)字段是版本字段,其度是4位,表示所使用的IP協(xié)議的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要針對(duì)版本是IPV4的數(shù)據(jù)包的解析.報(bào)頭標(biāo)
3、長(zhǎng)字段為4位,它定義了以4B為一個(gè)單位的IP包的報(bào)文長(zhǎng)度.報(bào)頭中除了選項(xiàng)字段和填充域字段外,其他各字段是定長(zhǎng)的.因此,IP數(shù)據(jù)包的頭長(zhǎng)度在2040B之間,是可變的.0 4 8 16 19 24 31版本報(bào)頭標(biāo)長(zhǎng)服務(wù)類(lèi)型總長(zhǎng)度標(biāo)識(shí)標(biāo)志片偏移生存時(shí)間協(xié)議頭校驗(yàn)和源IP地址目的IP地址選項(xiàng)填充域數(shù)據(jù)部分圖1 IP數(shù)據(jù)包的格式服務(wù)類(lèi)型字段共8位,用于指示路由器如何處理該數(shù)據(jù)包.該字段長(zhǎng)度由4位服務(wù)類(lèi)型(TOS)子域和3位優(yōu)先級(jí)子域組成,1位為保留位,該字段結(jié)構(gòu)如圖2所示. B7 b6 b5 b4 b3 b2 b1 b0優(yōu)先級(jí)DTRC0圖2 服務(wù)類(lèi)型字段結(jié)構(gòu)優(yōu)先級(jí)共有8種,優(yōu)先級(jí)越高表明數(shù)據(jù)包越重要.表
4、1中列出了各種優(yōu)先級(jí)所代表的意義.表一 優(yōu)先子域的說(shuō)明位數(shù)(b7b6b5) 意義111 網(wǎng)絡(luò)控制110 網(wǎng)絡(luò)間控制101 重要(CRITIC/ECP)100 即時(shí),優(yōu)先011 即時(shí)010 立刻001 優(yōu)先000 普通在4位服務(wù)類(lèi)型子域中b4,b3,b2,b1分別表示D(延遲),T(吞吐量),R(可靠性)與C(成本).表2列出了服務(wù)器類(lèi)型自域的構(gòu)成.位數(shù)( b4b3b2b1)意義 1111 安全級(jí)最高 1000 延遲最小 0100 吞吐量最大 0001 金錢(qián)成本最小 0000 普通服務(wù)總長(zhǎng)度字段為2B,它定義了以字節(jié)為單位的數(shù)據(jù)包的總長(zhǎng)度.IP數(shù)據(jù)包的最大長(zhǎng)度為65535B.標(biāo)識(shí)字段的長(zhǎng)度為16
5、位,用于識(shí)別IP數(shù)據(jù)包的編號(hào).每批數(shù)據(jù)都要有一個(gè)標(biāo)識(shí)值,用于讓目的主機(jī)判斷新來(lái)的數(shù)據(jù)屬于哪個(gè)分組.報(bào)頭中的標(biāo)志字段如圖7-3所示.標(biāo)志字段共3位,最高位是0.禁止分片標(biāo)志DF(do not fragment)字段的值若為1,表示不能對(duì)數(shù)據(jù)包分片;若DF值為0,則表明可以分片.分片標(biāo)志MF(more fragment)的值為1,表示接收到的不是最后一個(gè)分片;若MF值為0,表示接收到的是最后一個(gè)分片.片偏移字段共13位,說(shuō)明分片在整個(gè)數(shù)據(jù)包中的相對(duì)位置.片偏移值是以8B為單位來(lái)記數(shù)的,因此選擇的分片長(zhǎng)度應(yīng)該是8B的整數(shù)倍.生存時(shí)間(TTL)字段為8位,用來(lái)設(shè)置數(shù)據(jù)包在互聯(lián)網(wǎng)絡(luò)的傳輸過(guò)程的壽命,通常
6、是用一個(gè)數(shù)據(jù)包可以經(jīng)過(guò)的最多的路由器跳步數(shù)來(lái)限定的.協(xié)議字段為8位,表示使用此IP數(shù)據(jù)包的高層協(xié)議類(lèi)型,常用的協(xié)議號(hào)如表二所示.序號(hào)協(xié)議名稱(chēng)序號(hào)協(xié)議名稱(chēng)12468ICMPIGMPIP inIPTCPEGP17414689UDPIPV6RSVPOSPFA表二 典型的協(xié)議號(hào)頭校驗(yàn)和字段為16位,用于存放檢查報(bào)頭錯(cuò)誤的校驗(yàn)碼。檢驗(yàn)的范圍是整個(gè)IP包的報(bào)頭。校驗(yàn)和按如下方法計(jì)算:1)將頭校驗(yàn)和的字段置為0。2)將報(bào)頭部分的所有數(shù)據(jù)以16位為單位進(jìn)行累加,累加方式是求異或。3)將累加的結(jié)果取反碼,就是頭校驗(yàn)和。 當(dāng)收到一個(gè)IP包時(shí),要檢查報(bào)頭是否出錯(cuò),就把報(bào)頭中的所有數(shù)據(jù)以16位為單位進(jìn)行累加,若累加的
7、結(jié)果為0,則報(bào)文沒(méi)有出錯(cuò)。 地址字段包括源地址和目的地址。源地址和目的地址的長(zhǎng)度都是32位,分別表示發(fā)送數(shù)據(jù)包的源主機(jī)和目的主機(jī)的IP地址。 選項(xiàng)字段的長(zhǎng)度范圍為040B,主要用于控制和測(cè)試。在使用選項(xiàng)字段的過(guò)程中,有可能出現(xiàn)報(bào)頭部分的長(zhǎng)度不是32位的整數(shù)倍的情況。如果出現(xiàn)這種情況,就需要通過(guò)填充位來(lái)湊齊。任務(wù)設(shè)計(jì)分析:為了獲取網(wǎng)絡(luò)中的IP數(shù)據(jù)包,必須對(duì)網(wǎng)卡進(jìn)行編程,在這里我們使用套接字(socket)進(jìn)行編程。但是,在通常情況下,網(wǎng)絡(luò)通信的套接字程序只能響應(yīng)與自己硬件地址相匹配的數(shù)據(jù)包或是以廣播形式出發(fā)的數(shù)據(jù)包。對(duì)于其他形式的數(shù)據(jù)包,如已到達(dá)網(wǎng)絡(luò)接口但卻不是發(fā)送到此地址的數(shù)據(jù)包,網(wǎng)絡(luò)接口在驗(yàn)
8、證投遞地址并非自身地址之后將不引起響應(yīng),也就是說(shuō)應(yīng)用程序無(wú)法收取與自己無(wú)關(guān)的數(shù)據(jù)包。我們要想獲取流經(jīng)網(wǎng)絡(luò)設(shè)備的所有數(shù)據(jù)包,就需要將網(wǎng)卡設(shè)置為混雜模式。本程序主要由三部分構(gòu)成:初始化原始套接字,反復(fù)監(jiān)聽(tīng)捕獲數(shù)據(jù)包和解析數(shù)據(jù)包。下面就結(jié)合核心代碼對(duì)程序的具體實(shí)現(xiàn)進(jìn)行講解,同時(shí)使程序流程更加清晰,去掉了錯(cuò)誤檢查等保護(hù)性代碼。程序流程圖:具體程序代碼:#include<iostream>#include<winsock2.h>#include<ws2tcpip.h>#include<fstream>#include <windows.h>/#
9、include <winsock.h>#pragma comment(lib,"ws2_32") /指定連接到網(wǎng)絡(luò)應(yīng)用和internet#define IO_RCVALL _WSAIOW(IOC_VENDOR,1) typedef struct IP_HEAD union /定義聯(lián)合 unsigned char Version; unsigned char HeadLen; ; unsigned char ServiceType; unsigned short TotalLen; unsigned short Identifier; union unsigned
10、 short Flags; unsigned short FragOffset; ; unsigned char TimeToLive; unsigned char Protocol; unsigned short HeadChecksum; unsigned int SourceAddr; unsigned int DestinAddr; unsigned char Options; ip_head; /定義IP頭部的數(shù)據(jù)結(jié)構(gòu)void main(int argc,char *argv) using namespace std; ofstream outfile("e:logfile
11、.txt",ios:out);if(argc!=2) cout<<endl<<"請(qǐng)以下格式輸入命令行:PackParse packet_sum"<<endl; /packet_sum 為要分析IP包的個(gè)數(shù)。return; WSADATA WSAData; if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0) cout<<endl<<"WSASTartup初始化失敗"<<endl; return; SOCKET sock=socket(
12、AF_INET,SOCK_RAW,IPPROTO_IP); /三個(gè)參分別為通信發(fā)生的區(qū)字段,套接字的類(lèi)型,與IP協(xié)議if(sock=INVALID_SOCKET) cout<<endl<<"創(chuàng)建Socket失敗!"<<endl; closesocket(sock); WSACleanup(); BOOL flag=TRUE; if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *) &flag,sizeof(flag)=SOCKET_ERROR) cout<<endl<&
13、lt;"setsockopt操作失敗:"<<WSAGetLastError()<<endl; closesocket(sock); WSACleanup(); char hostName128;/獲取主機(jī)名if(gethostname(hostName,100)=SOCKET_ERROR) cout<<endl<<"gethostname操作失敗:"<<WSAGetLastError()<<endl; closesocket(sock); WSACleanup(); hostent
14、*pHostIP; /獲取本地IPif(pHostIP=gethostbyname(hostName)=NULL) cout<<endl<<"gethostbyname操作失敗:"<<WSAGetLastError()<<endl; closesocket(sock); WSACleanup(); sockaddr_in host_addr;/ host_addr.sin_family=AF_INET; host_addr.sin_port=htons(6000); host_addr.sin_addr=*(in_addr *
15、)pHostIP->h_addr_list0; if(bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr)=SOCKET_ERROR) cout<<endl<<"bind操作失敗:"<<WSAGetLastError()<<endl; closesocket(sock); /綁定網(wǎng)卡WSACleanup(); DWORD dwBufferLen10; DWORD dwBufferInLen=1; DWORD dwBytesReturned=0; if(WSAIoctl
16、(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen) , &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)=SOCKET_ERROR) cout<<endl<<"WSAIoctl操作失敗:"<<WSAGetLastError()<<endl; closesocket(sock); /將網(wǎng)卡設(shè)為混雜模式,以接受所有數(shù)據(jù)WSACleanup(); cout<<en
17、dl<<"開(kāi)始解析IP包:"<<endl; char buffer65535; /設(shè)置緩沖區(qū)int packsum=atoi(argv1); /字符串轉(zhuǎn)換為整形for(int i=0;i<packsum;i+) if(recv(sock,buffer,65535,0)>0) /四個(gè)參數(shù)分別是套接字描述符,緩沖區(qū)的地址,緩沖區(qū)大小,附加標(biāo)志 ip_head ip=*(ip_head *)buffer; cout<<"-"<<endl; cout<<"版本:"<
18、<(ip.Version>>4)<<endl; /獲取頭部長(zhǎng)度字段cout<<"頭部長(zhǎng)度:"<<(ip.HeadLen&0x0f)*4)<<endl; /獲取頭部長(zhǎng)度字段cout<<"服務(wù)類(lèi)型:Priority"<<(ip.ServiceType>>5)<<", Service"<<(ip.ServiceType>>1)&0x0f)<<endl; /優(yōu)先級(jí)子域和TOS子域
19、cout<<"總長(zhǎng)度:"<<ip.TotalLen<<endl;/獲取總長(zhǎng)度字段cout<<"標(biāo)識(shí)符:"<<ip.Identifier<<endl;/獲取標(biāo)識(shí)字段cout<<"標(biāo)志位:"<<(ip.Flags>>15)&0x01)<<",DF= "<<(ip.Flags>>14)&0x01)<<",Mf="<<(i
20、p.Flags>>13)&0x01)<<endl; /獲得標(biāo)志字段cout<<"片偏移:"<<(ip.FragOffset&0x1fff)<<endl; /獲取分段偏移字段cout<<"生存周期:"<<(int)ip.TimeToLive<<endl; /獲取生存時(shí)間字段cout<<"協(xié)議:Protocol"<<(int)ip.Protocol<<endl; /獲取協(xié)議字段cout<
21、<"頭部校驗(yàn)和:"<<ip.HeadChecksum<<endl; /獲取頭校驗(yàn)和字段cout<<"原地址:"<<inet_ntoa(*(in_addr *)&ip.SourceAddr)<<endl; /獲取源IP地址字段cout<<"目的IP地址:"<<inet_ntoa(*(in_addr *)&ip.DestinAddr)<<endl; /獲取目的IP地址字段outfile<<"-&quo
22、t;<<endl; outfile<<"版本:"<<(ip.Version>>4)<<endl; outfile<<"頭部長(zhǎng)度:"<<(ip.HeadLen&0x0f)*4)<<endl; outfile<<"服務(wù)類(lèi)型:Priority"<<(ip.ServiceType>>5)<<", Service"<<(ip.ServiceType>>
23、1)&0x0f)<<endl; outfile<<"總長(zhǎng)度:"<<ip.TotalLen<<endl; outfile<<"標(biāo)識(shí)符:"<<ip.Identifier<<endl; outfile<<"標(biāo)志位:"<<(ip.Flags>>15)&0x01)<<",DF= "<<(ip.Flags>>14)&0x01)<<",Mf="<<(ip.Flags>>13)&0x01)<<endl; outfile<<"片偏移:"<
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 13465.1-2024不透性石墨材料試驗(yàn)方法第1部分:總則
- 廢舊家電回收利用行業(yè)營(yíng)銷(xiāo)策略方案
- 離心碾磨機(jī)細(xì)分市場(chǎng)深度研究報(bào)告
- 人力資源流程再造行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 相框邊條項(xiàng)目運(yùn)營(yíng)指導(dǎo)方案
- 樂(lè)器銷(xiāo)售行業(yè)營(yíng)銷(xiāo)策略方案
- 數(shù)據(jù)管理用計(jì)算機(jī)產(chǎn)品供應(yīng)鏈分析
- 紡織品制壁掛細(xì)分市場(chǎng)深度研究報(bào)告
- 書(shū)法培訓(xùn)行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 茶壺項(xiàng)目運(yùn)營(yíng)指導(dǎo)方案
- 上期開(kāi)特下期必開(kāi)特規(guī)律
- 基礎(chǔ)生命科學(xué)導(dǎo)論:第七章-進(jìn)化課件
- NCCN癌痛指南更新解讀專(zhuān)家講座
- 二維動(dòng)畫(huà)課件
- 國(guó)開(kāi)電大軟件工程形考作業(yè)3參考答案
- 2023屆吉林省吉林大學(xué)附屬中學(xué)化學(xué)高一第一學(xué)期期中復(fù)習(xí)檢測(cè)試題含解析
- 古詩(shī)文賞析社團(tuán)詩(shī)詞大會(huì)課件
- 胸外科診療指南和操作規(guī)范
- 玻璃幕墻工程施工質(zhì)量控制方法與措施
- 銷(xiāo)售逼單成交話術(shù)及技巧
- 《影響人類(lèi)文明的里程碑》課件
評(píng)論
0/150
提交評(píng)論