版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課設(shè)名稱(chēng):IP數(shù)據(jù)包解析班 級(jí):學(xué) 號(hào):姓 名:指導(dǎo)老師:目錄 TOC o 1-3 h z u HYPERLINK l _Toc327820939 1.課程設(shè)計(jì)目的 PAGEREF _Toc327820939 h 1 HYPERLINK l _Toc327820940 2.課程設(shè)計(jì)要求 PAGEREF _Toc327820940 h 1 HYPERLINK l _Toc327820941 3.程序設(shè)計(jì)分析 PAGEREF _Toc327820941 h 1 HYPERLINK l _Toc327820942 3.1 網(wǎng)卡設(shè)置 PAGEREF _Toc327820942 h 1 HYPERLIN
2、K l _Toc327820943 3.2 使用套接字 PAGEREF _Toc327820943 h 2 HYPERLINK l _Toc327820944 3.2.2 接收數(shù)據(jù)包 PAGEREF _Toc327820944 h 2 HYPERLINK l _Toc327820945 3.3 定義IP頭部的數(shù)據(jù)結(jié)構(gòu) PAGEREF _Toc327820945 h 3 HYPERLINK l _Toc327820946 3.4 IP包的解析 PAGEREF _Toc327820946 h 3 HYPERLINK l _Toc327820947 3.5 協(xié)議的定義 PAGEREF _Toc327
3、820947 h 4 HYPERLINK l _Toc327820948 3.6捕獲處理 PAGEREF _Toc327820948 h 4 HYPERLINK l _Toc327820949 4.運(yùn)行結(jié)果 PAGEREF _Toc327820949 h 5 HYPERLINK l _Toc327820951 5.總結(jié) PAGEREF _Toc327820951 h 5 HYPERLINK l _Toc327820953 6.源程序代碼 PAGEREF _Toc327820953 h 61.課程設(shè)計(jì)目的 本課程設(shè)計(jì)的目的就是設(shè)計(jì)一個(gè)捕獲并解析IP數(shù)據(jù)包的程序,并根據(jù)這個(gè)程序,說(shuō)明IP數(shù)據(jù)包的結(jié)
4、構(gòu)及IP協(xié)議的相關(guān)問(wèn)題,從而對(duì)IP層的工作原理有更好的理解和認(rèn)識(shí)。2.課程設(shè)計(jì)要求 本設(shè)計(jì)的目標(biāo)是捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫(xiě)入日志文件。程序的具體要求如下:1)以命令行形式運(yùn)行:ipparse logfile,其中ipparse是程序名, 而logfile則代表記錄結(jié)果的日志文件。 2)在標(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)容。3)當(dāng)程序接收到鍵盤(pán)輸入Ctrl+C時(shí)退出3.程序設(shè)計(jì)分析3.1 網(wǎng)卡設(shè)置 為了獲取網(wǎng)
5、絡(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īng),也就是說(shuō)應(yīng)用程序無(wú)法收取與自己無(wú)關(guān)的數(shù)據(jù)包。我們要想獲取網(wǎng)絡(luò)設(shè)備的所有數(shù)據(jù)包,就是需要將網(wǎng)卡設(shè)置為混雜模式。3.2 使用套接字 套接字分為三種,即流套接字(Stream socket)、數(shù)據(jù)報(bào)套接字(Datagram Socket)和原始套接字(Raw Socket)。要進(jìn)行IP層數(shù)據(jù)包的接收和
6、發(fā)送,應(yīng)使用原始套接字。創(chuàng)建原始套接字的代碼如下: Socket sock: Sock=wsasocket(af_inet,sock_raw,ipproto-ip,null,0,wsa-flag-overlapped):本設(shè)計(jì)不用考慮超時(shí)情況。創(chuàng)建套接后,IP頭就會(huì)包含在接收數(shù)據(jù)包中。然后,我可以設(shè)置IP頭操作選項(xiàng),調(diào)用setsockopt函數(shù)。其中flag設(shè)置為true,并設(shè)定IP-HDRINCL選項(xiàng),表明用戶(hù)可以親自對(duì)IP頭進(jìn)行處理。最后使用bind()函數(shù)將socket綁定到本地網(wǎng)卡上。綁定網(wǎng)卡后,需用WSAIoctl()函數(shù)把網(wǎng)卡設(shè)置為混雜模式,使網(wǎng)卡能夠接收所有的網(wǎng)絡(luò)數(shù)據(jù)。如果接收的
7、數(shù)據(jù)包中的協(xié)議類(lèi)型和定義的原始套接字匹配,那么接收的數(shù)據(jù)就拷貝到套接字中,因此,網(wǎng)卡就可以接收所有經(jīng)過(guò)的IP包。3.2.2 接收數(shù)據(jù)包 在程序中可使用recv()函數(shù)接收經(jīng)過(guò)的IP包。該函數(shù)有四個(gè)參數(shù),第一個(gè)參數(shù)接收操作所用的套接字描述符;第二個(gè)參數(shù)接收緩沖區(qū)的地址;第三個(gè)參數(shù)接收緩沖區(qū)的大小,也就是所要接收的字節(jié)數(shù);第四個(gè)參數(shù)是一個(gè)附加標(biāo)志,如果對(duì)所發(fā)送的數(shù)據(jù)沒(méi)特殊要求,直接設(shè)為0。因?yàn)镮P數(shù)據(jù)包的最大長(zhǎng)度是65535B,因此緩沖區(qū)的大小不能小于65535B。設(shè)置緩沖區(qū)后,可利用循環(huán)來(lái)反復(fù)監(jiān)聽(tīng)接收IP包,用recv()函數(shù)實(shí)現(xiàn)接收功能。3.3 定義IP頭部的數(shù)據(jù)結(jié)構(gòu)程序需要定義一個(gè)數(shù)據(jù)結(jié)構(gòu)表
8、示IP頭部。其代碼如下:struct IP_HEADERunsigned short ip_version, /*IP的版本號(hào) */ip_hdr_len; /*IP包頭的長(zhǎng)度*/ip_tos; /*IP包的服務(wù)類(lèi)型*/ip_total_len; /*IP包的總長(zhǎng)度*/ip_id; /*IP包的分段標(biāo)識(shí)*/ip_flags; /*IP包的分段標(biāo)志*/ip_frag_offset; /*IP包的分段偏移*/ip_ttl; /*IP包的生存時(shí)間*/ip_proto; /*IP包的高層協(xié)議*/ip_hdr_chksum; /*IP包的校驗(yàn)和*/struct IPADDRESS ip_src_addr;
9、 /*IP包的源IP地址*/ip_dest_addr; /*IP包的目的IP地址*/ipheader;3.4 IP包的解析 解析IP包的字段有兩種策略。針對(duì)長(zhǎng)度為8位、16位和32位的字段(或子字段)時(shí),可以利用IP-HEADER的成員直接獲取。要解析長(zhǎng)度不是8位倍數(shù)的字段(或子字段)時(shí),可以利用C語(yǔ)言中的移位以人、及與、或操作完成。3.5 協(xié)議的定義(包含相應(yīng)的頭文件#include #include):DWORD dwIoControlCode=SIO_RCVALL, /*接收所有的IP包*/dwProtocol=IPPROTO_IP; /*協(xié)議類(lèi)型為IP*/3.6捕獲處理1.加載 Win
10、sock;2.創(chuàng)建一個(gè)接收原始IP包的socket連接;3.綁定到一個(gè)接口;4.進(jìn)行WSAIoctl設(shè)置,接收所有的IP數(shù)據(jù)包。代碼如下:if (WSAIoctl(s, dwIoControlCode, &optval, sizeof(optval),NULL, 0, &dwBytesRet, NULL, NULL) = SOCKET_ERROR)5.接著設(shè)定一個(gè)線(xiàn)程進(jìn)行捕獲:(1)創(chuàng)建一個(gè)接收IP包的鏈表頭;(2)設(shè)置一個(gè)標(biāo)識(shí),為真,則不斷進(jìn)行IP包的捕獲;(3)建立一個(gè)新的結(jié)點(diǎn),將捕獲的數(shù)據(jù)包加入到該結(jié)點(diǎn);(4)如果鏈表的長(zhǎng)度達(dá)到指定的長(zhǎng)度,創(chuàng)建一個(gè)線(xiàn)程對(duì)該鏈表的IP包進(jìn)行解析;再設(shè)置一個(gè)
11、在IP數(shù)據(jù)包鏈表不足給定的長(zhǎng)度,而又中止IP捕獲時(shí),對(duì)鏈表的處理;(5)為下一個(gè)IP包鏈表創(chuàng)建一個(gè)鏈表頭。6.建立一個(gè)進(jìn)行IP包解析并顯示的線(xiàn)程,進(jìn)行解析IP數(shù)據(jù)包,然后顯示IP數(shù)據(jù)包。4.運(yùn)行結(jié)果截獲IP數(shù)據(jù)包程序運(yùn)行結(jié)果如下:5.總結(jié) 在本次課程設(shè)計(jì)中,通過(guò)多次上機(jī)的實(shí)踐,充分利用所學(xué)的計(jì)算機(jī)網(wǎng)絡(luò)以及socket編程與C語(yǔ)言編程的知識(shí),并上網(wǎng)搜索一部分相當(dāng)資料,粗略設(shè)計(jì)出該程序。 通過(guò)本次課程設(shè)計(jì),充分運(yùn)用了所學(xué)的計(jì)算機(jī)網(wǎng)絡(luò)知識(shí),設(shè)計(jì)出了如何解析IP數(shù)據(jù)包,從而更加深刻的了解到了IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問(wèn)題,從而對(duì)IP層的工作原理有更好的理解和認(rèn)識(shí)。 在課程設(shè)計(jì)的過(guò)程也碰到的不少問(wèn)
12、題。例如:對(duì)IP數(shù)據(jù)包的結(jié)構(gòu)不了解、IP層工作原理也不熟悉、C語(yǔ)言編程基礎(chǔ)差等一系列問(wèn)題。讓我認(rèn)識(shí)到了自己的很大不足,在以后的學(xué)習(xí)過(guò)程中還將努力提高。6.源程序代碼#include winsock2.h#include ws2tcpip.h#include iostream.h#include stdio.h#pragma comment(lib, ws2_32.lib)#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)#define BUFFER_SIZE 65535/* 定義IP頭部數(shù)據(jù)結(jié)構(gòu) */typedef struct _IP_HEADERunionBYT
13、E Version; /版本(前4位)BYTE HdrLen; /報(bào)頭標(biāo)長(zhǎng)(后四位),IP頭長(zhǎng)度;BYTE ServiceType; /服務(wù)類(lèi)型WORD TotalLen; /總長(zhǎng)度WORD ID; /標(biāo)識(shí)unionWORD Flags;WORD FragOff;BYTE TimeToLive;BYTE Protocol;WORD HdrChksum;DWORD SrcAddr;DWORD DstAddr;BYTE Options;IP_HEADER;/逐位解析IP頭中的信息,獲取版本號(hào)void getVersion(BYTE b,BYTE &version)version = b4;void
14、 getIHL(BYTE b,BYTE &result)result = (b & 0 x0f) *4;/解析服務(wù)類(lèi)型char * parseServiceType_getProcedence(BYTE b)switch(b5)case 7:return Network Control;case 6:return Internet work Control;case 5:return CRITIC/ECP;case 4:return Flash Override;case 3:return Falsh;case 2:return Immediate;case 1:return Priority
15、;case 0:return Routine;default:return Unknown;char * parseServiceType_getTOS(BYTE b)b=(b1)&0 x0f;switch(b)case 0:return Normal service; case 1:return Minimize monetary cost;case 2:return Maximize reliability;case 4:return Maximize throughput;case 8:return Minimize delay;case 15:return Maximize secur
16、ity;default:return Unknown;/* 獲取禁止分片標(biāo)志和分片標(biāo)志 */void getFlags(WORD w,BYTE &DF, BYTE &MF)DF=(w14)&0 x01;MF=(w13)&0 x01;/* 獲取分片偏移量 */void getFragoff(WORD w,WORD &fragoff)fragoff=w&0 x1ffff;/獲取協(xié)議char * getProtocol(BYTE Protocol)switch (Protocol)case 1: return ICMP;case 2:return IGMP;case 3:return GGP;cas
17、e 4:return IP in IP ;case 6:return TCP;case 8:return EGP;case 17:return UDP;case 41:return IPv6;case 46:return OSPF;default:return UNKNOWN;/* 解析IP數(shù)據(jù)包 */void ipparse(FILE * file,char *buffer)IP_HEADER ip = *(IP_HEADER *)buffer;fseek(file,0,SEEK_END);BYTE version;getVersion(ip.Version,version);fprintf
18、(file,版本=IPV%drn,version);BYTE headerLen;getIHL(ip.HdrLen,headerLen);fprintf(file,頭長(zhǎng)度=%d(BYTE)rn,headerLen);fprintf(file,服務(wù)類(lèi)型=%s,%srn,parseServiceType_getProcedence(ip.ServiceType),parseServiceType_getTOS(ip.ServiceType);fprintf(file,數(shù)據(jù)報(bào)長(zhǎng)度=%d(BYTE)rn,ip.TotalLen);fprintf(file,數(shù)據(jù)報(bào)ID=%drn,ip.ID);/* DF
19、表示禁止分片標(biāo)志,MF表示分片標(biāo)記 */BYTE DF,MF;getFlags(ip.Flags,DF,MF);fprintf(file,分段標(biāo)志 DF=%d,MF=%drn,DF,MF);WORD fragOff;getFragoff(ip.FragOff,fragOff);fprintf(file,分段偏移值=%drn,fragOff);fprintf(file,生存期=%d(hops)rn,ip.TimeToLive);fprintf(file,協(xié)議=%srn,getProtocol(ip.Protocol);fprintf(file,頭校驗(yàn)和=0 x%0 xrn,ip.HdrChksu
20、m);fprintf(file,源IP地址=%srn,inet_ntoa(*(in_addr*)&ip.SrcAddr);fprintf(file,目的IP地址=%srn,inet_ntoa(*(in_addr*)&ip.DstAddr);fprintf(file,_rn);/* 程序入口 */int main(int argc,char *argv)/* cmd參數(shù) */if(argc!=2)printf(usage error!n);return -1;FILE *file;/* 以讀寫(xiě)的方式建立一個(gè)文本文件logfile.txt */if(file=fopen(argv1,w+)=NUL
21、L)printf(fail to open file %s,logfile.txt);return -1;WSAData wsData;/* 啟動(dòng)2.2版本的Socket,并將Socket版本信息保存到wsData中 */if(WSAStartup(MAKEWORD(2,2),&wsData)!=0)printf(WSA startup failed!n);return -1;fprintf(file,Socket初始化.rn);fprintf(file,=rn);fprintf(file,描述:%srn,wsData.szDescription);fprintf(file,狀態(tài):%srn,w
22、sData.szSystemStatus);fprintf(file,=rn);SOCKET sock;/* 創(chuàng)建原始套接字 */if(sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)=INVALID_SOCKET)printf(Can not create socket!n);return -1;BOOL flag=true;/* 設(shè)置IP頭操作選項(xiàng) */if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag)=SOCKET_ERROR)printf(setsockopt failed
23、!n);return -1;char hostName128;/* 獲取本地主機(jī)名 */if(gethostname(hostName,100)=SOCKET_ERROR)printf(gethostname failed!n);return -1;hostent *pHostIP;/* 根據(jù)主機(jī)名獲取主機(jī)信息 */if(pHostIP=gethostbyname(hostName)=NULL)printf(gethostbyname failed!n);return -1;printf(Hostname: %srn,pHostIP-h_name);printf(IPAddress: %srn,inet_ntoa(*(struct in_addr *)pHostIP-h_addr);/* 封裝IP地址信息 */sockad
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年溫州職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 2024年深圳職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 二零二五年度高速公路橋梁養(yǎng)護(hù)勞務(wù)承包協(xié)議3篇
- rA公路工程施工測(cè)量教學(xué)文案
- 2024年浙江紡織服裝職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 九年級(jí)數(shù)學(xué)上冊(cè)第一章特殊平行四邊形11菱形的性質(zhì)與判定第3課時(shí)菱形的性質(zhì)判定與其他知識(shí)的綜合作業(yè)課件新版北師大版
- 2024年瀘州職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 2024年河南護(hù)理職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 2024年河北化工醫(yī)藥職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 2024年江西青年職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 2024年慶陽(yáng)市人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 專(zhuān)題03 首字母填空15篇-沖刺2024年中考英語(yǔ)必考題型終極預(yù)測(cè)(廣州專(zhuān)用)
- 電工電子技術(shù) 課件-電工電子技術(shù) 第2章
- 第十七屆山東省職業(yè)院校技能大賽市場(chǎng)營(yíng)銷(xiāo)賽項(xiàng)賽卷第一套
- 塔吊司機(jī)和指揮培訓(xùn)
- 政府關(guān)系與公共關(guān)系管理制度
- 糧庫(kù)工程合同范本
- 研發(fā)實(shí)驗(yàn)室安全培訓(xùn)
- 地測(cè)防治水技能競(jìng)賽理論考試題庫(kù)(含答案)
- 湖北省十堰市2025屆高一數(shù)學(xué)第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 中考英語(yǔ)復(fù)習(xí)分析如何寫(xiě)英語(yǔ)高分作文課件
評(píng)論
0/150
提交評(píng)論