




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、CENTRAL SOUTH UNIVERSITY計算機網絡課程設計報告目錄第一章 課程設計的目的與要求11.1 課程設計的目的11.2 課程設計的要求1第二章 課程設計的內容32.1 課程設計的內容32.2 內容的要求3第三章 程序分析與設計43.1 IP數據包43.1.1 IP數據包的格式說明43.1.2 IP數據包的格式43.1.3 IP數據包的C+定義53.1.4 IP數據包的解析63.2 套接字73.1.4 套接字的使用73.1.4 使用原始套接字73.3 接受數據包7第4章 實驗結果104.1 程序截圖10第五章 總結115.1 實驗心得11第六章 附錄126.1 源代碼12第一章
2、課程設計的目的與要求1.1 課程設計的目的 計算機網絡課程設計的目的,是為了讓學生更深入地掌握計算機網絡的核心內容,實現理論與實踐相結合。讓學生用具體的實踐成果,體現對理論知識的掌握程度。有利于學生提高計算機網絡的實踐能力,加深對計算機網絡理論知識的理解。1.2 課程設計的要求(1)編寫程序,實現系統(tǒng)的基本功能,鼓勵自行增加新功能;(2)要有用戶界面:要求至少采用文本菜單界面;鼓勵采用圖形菜單界面;(3)寫課程設計報告,內容包括:l 封面(參見附錄I)l 需求分析:以無歧義的陳述說明程序設計的任務,強調的是程序要做什么?給出功能模塊圖和流程圖。同時明確規(guī)定:輸入的形式和輸出值的范圍;輸出的形式
3、;程序所能夠達到的功能;測試數據,包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。l 概要設計:包括程序設計組成框圖,程序中使用的存儲結構設計說明(如果指定存儲結構請寫出該存儲結構的定義)。l 詳細設計:包括模塊功能說明(如函數功能、入口及出口參數說明,函數調用關系描述等),每個模塊的算法設計說明(可以是描述算法的流程圖)。其中源程序要按照寫程序的規(guī)則來編寫,結構清晰,重點函數的重點變量,重點功能部分要加上清晰的程序注釋。l 運行結果:包括典型的界面、輸入和輸出數據等;l 總結:包括課程設計中遇到的問題,解決問題的過程及體會、收獲、對課程設計的認識與思考等。l 附錄:包括主要程序清單,
4、要有適當的注釋,使程序容易閱讀。(4)課程設計報告書寫規(guī)范參見附錄II,不按照規(guī)范書寫的,成績不能評為“優(yōu)”或“良”。(5)無論在校外、校內,都要嚴格遵守學校和所在單位的學習和勞動紀律、 1規(guī)章制度,學生有事離校必須請假。課程設計期間,無故缺席按曠課處理;缺席時間達四分之一以上者,其成績按不及格處理。第二章 課程設計的內容2.1 課程設計的內容本次實驗的要求在網絡環(huán)境,使用VC+編寫程序實現捕獲網絡中的IP數據包,解析數據包的內容,將結果顯示在標準輸出上,并同時寫入日志文件。2.2 內容的要求(1)以命令行形式運行(應如程序名+參數名):ipparse logfile,其中ipparse是程序
5、名,而logfile為該程序所帶參數,其代表記錄結果的日志文件。(2)在標準輸出和日志文件中寫入捕獲的IP包的版本、頭長度、服務類型、數據包總長度、數據包標識、分段標志、分段偏移值、生存時間、上層協(xié)議類型、頭校驗和、源IP地址和目的IP地址等內容。 (3)當程序接收到鍵盤輸入CtrlC時退出。第三章 程序設計與分析3.1 IP數據包3.1.1 IP數據包的格式說明 IP數據包格式包含了標頭固定部分,標頭可變部分和數據區(qū)三部分。IP數據報標頭部分固定為20個字節(jié),其中包含了12個參數域,各參數域隱含著網間協(xié)議的傳輸機制。IP具體的標頭格式如圖1所示。 各參數域的具體含義如下:1) 版本號:長度4
6、位,表示所使用的IP協(xié)議的版本。IPv4版本號字段值為4;IPV6版本號字段號的值為6.2) 標頭長:長度4位,定義了一個以4B為一個單位的IP包的報頭長度3) 服務類型:共8位,高3位組成優(yōu)先級子域,隨后4位組成服務類型子域。4) 數據報總長度:總長度為2B(即6位)。定義了以字節(jié)為單位的數據報的總長度。5) 重裝標識:長度16位,用于識別IP數據報的編號,讓目的主機判斷新來的數據屬于哪個分組。6) 分片標識:共3位,最高位為0;DF禁止分片標識。DF=0,可以分片;DF=1,不能分片。MF:分片標識。MF=0,表示接的是最后一個分片;MF=1,不是最后一個分片。7) 片偏移值:共13位,說
7、明分片在整個數據報中的相對位置。8) 生存周期:8位,用來設置數據數據報在整個網絡傳輸過程中的壽命。常以一個數據報可以經過的最多的路由器跳步數來控制。9) 協(xié)議類型:共8位,表示該IP數據報的高層協(xié)議類型。10) 標頭校驗和:共16位,用于存放檢查報頭錯誤的校驗碼。11) 源、宿主機地址:共32位,分別表示發(fā)送和接受數據報的源主機和宿主機的IP地址。選項數據域:0-40B,用于控制和測試3.1.2 IP數據包的格式3.1.3 IP數據包的C+定義typedef struct _IPunionBYTE Version; / 版本BYTE HdrLen;/IHT;BYTE ServiceType;
8、 / 服務類型WORD TotalLen; / 總長WORD ID; / 標識union WORD Flags; / 標志WORD FragOff; / 分段偏移;BYTE TimeToLive; / 生命期BYTE Protocol; / 協(xié)議WORD HdrChksum; / 頭校驗和DWORD SrcAddr; / 源地址DWORD DstAddr; / 目的地址BYTE Options; / 選項 IP;3.1.4 IP數據包的解析通過IP_HEADER解析IP頭各個字段的代碼:/*獲取版本字段*/ip.Version4;/*獲取頭部長度字段*/ip.HdrLen & 0x0f;/*獲
9、取服務類型字段中的優(yōu)先級子域*/ip.ServiceType5;/*獲取服務類型字段中的TOS子域*/(ip.ServiceType1)&0x0f;/*獲取總長度字段*/ip.TotalLen;/*獲取標識字段*/ip.ID;/*解析標志字段*/DF = (ip.Flags14) & 0x01;MF = (ip.Flags13) & 0x01;/*獲取分段偏移字段*/ip.FragOff & 0x1fff;/*獲取生存時間字段*/ip.TimeToLive;/*獲取協(xié)議字段*/ip.Protocol;/*獲取頭校驗和字段*/ip.HdrChksum;/*解析源IP地址字段*/inet_ntoa
10、(*(in_addr*)&ip.SrcAddr);/*解析目的IP地址字段*/inet_ntoa(*(in_addr*)&ip.DstAddr);3.2 套接字3.2.1 套接字的使用本程序使用套接字socket編程,將網卡設為能夠接受流經網卡的所有類型的數據包。首先,初始化套接字,然后監(jiān)聽數據包,解析數據包。SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用來創(chuàng)建套接字,其參數為通信發(fā)生的區(qū)字段和套接字的類型。 WSAIoctl(sock,IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen)函數用來把
11、網卡設置為混雜模式。recv(sock,buffer,65535,0)函數用來接收經過的IP包,其參數分別是套接字描述符,緩沖區(qū)的地址,緩沖區(qū)的大小。3.2.1 使用原始套接字 要進行IP層數據包的接收和發(fā)送,應使用原始套接字。創(chuàng)建原始套接字的代碼如下: SOCKET sock;sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);在WSASoccket函數中,第一個參數指定通信發(fā)生的區(qū)字段,AF_INET是針對Internet的,允許在遠程主機之間通信。第二個參數是套接字的類型,在AF_INET地址族下
12、,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三種套接字類型。在這里,設置為SOCK_RAW,表示聲明的是一個原始套接字類型。第三個參數依賴于第二個參數,用于指定套接字所有的特定協(xié)議,這里使用IP協(xié)議。第四個參數為WSAPROTOCOL_INFO位,該位可以置空。第五個參數保留,永遠置0。第六個參數是標志位,WSA_FLAG_OVERLAPPED表明可以使用發(fā)送接收超時設置。創(chuàng)建原始套接字后,IP頭就會包含在接收的數據中。然后,可以設置IP頭操作選項,調用setsockopt函數。其中flag設置為true,并設定IP_HDRINCL選項,表明用戶可以親自對IP頭進行處理。
13、BOOL flag=true;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag);之后,使用如下代碼完成對socket的初始化工作:/*獲取主機名*/char hostName128;gethostname(hostName,100);/*獲取本地IP地址*/hostent * pHostIP;pHostIP = gethostbyname(hostName);/*填充SOCKADDR_IN結構的內容*/sockaddr_in addr_in;addr_in.sin_addr = *(in_addr *)pHostIP
14、-h_addr_list0;addr_in.sin_family = AF_INET;addr_in.sin_port = htons(6000);/*綁定socket*/bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in);填寫sockaddr_in的內容時,其地址值應填寫為本機IP地址,本機IP地址可以通過gethostbyname()函數獲??;端口號可以隨便填寫,但不能與系統(tǒng)沖突;協(xié)議族應填為AF_INET。使用htons()函數可以將無符號短整型的主機數據轉換為網絡字節(jié)順序的數據。最后使用bind(0函數將socket綁定到本機網卡上。綁定網卡后,
15、需要用WSAIoctl()函數把網卡設置為混雜模式,使網卡能夠接收所有網絡數據,其關鍵代碼如下:#define SIO_RCVALL_WSAIOW(IOC_VENDOR,1)DWORD dwBufferLen10;DWORD dwBufferInLen = 1;DWORD dwBytesReturned = 0;WSAIoct1(SnifferSocket, IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);如果接收的數據包中的協(xié)
16、議類型和定義的原始套接字匹配,那么接收到的數據就拷貝到套接字中。因此,網卡就可以接收所有經過的IP包。3.3 接收數據包 在程序中可使用recv()函數接收經過的IP包。該函數有四個參數,第一個參數接收操作所用的套接字描述符;第二個參數接收緩沖區(qū)的地址;第三個參數接收緩沖區(qū)的大小,也就是所要接收的字節(jié)數;第四個參數是一個附加標志,如果對所發(fā)送的數據沒特殊要求,直接設為0。因為IP數據包的最大長度是65535B,因此,緩沖區(qū)的大小不能小于65535B。設置緩沖區(qū)后,可利用循環(huán)來反復監(jiān)聽接收IP包,用RECV()函數實現接收功能的代碼如下:#define BUFFER_SIZE 65535char
17、 bufferBUFFER_SIZE; /設置緩沖區(qū)while(true)recv(sock,buffer,BUFFER_SIZE,0); /接收數據包 /*然后是解析接收的IP包*/第4章 實驗結果4.1 程序截圖第5章 總結通過這次課程設計,我們了解到關于計算機網絡數據傳送及處理過程中,軟件起到了巨大的作用。熟悉了C+語言在計算機網絡方面的應用,是一次難得的機會。此外,我還了解了網絡通信協(xié)議的基本工作原理及套接字的使用,雖然剛開始的時候比較模糊,但是通過與同學共同探討和網上查閱資料,最終我成功完成了實驗。這次課程設計培養(yǎng)了我們基本掌握網絡編程的基本思路和方法,讓我們懂得如何去學習這類東西。
18、同時提高我們對所學計算機網絡理論知識的理解能力,提高和挖掘我們對所學知識的實際應用能力和創(chuàng)新能力。同學們的合作是實驗成功的必要條件,而謹慎對待事物的態(tài)度是成功的關鍵。第6章 附錄6.1 源代碼#include #include #include #include #pragma comment (lib,Ws2_32.lib)#define BUFFER_SIZE 65535#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)typedef struct _IP_HEADER /定義IP頭unionBYTE Version; /版本(前4位) BYTE HdrLen;
19、 /報頭標長(后4位),IP頭長度;BYTE ServiceType; /服務類型WORD TotalLen; /數據報總長WORD ID; /標識unionWORD Flags; /標識(前3位)WORD FragOff; /分段偏移(后13位);BYTE TimeToLive; /生存周期BYTE Protocol; /協(xié)議WORD HdrChksum; /頭校驗和DWORD SrcAddr; /源地址DWORD DstAddr; /目地地址BYTE Options; /選項IP_HEADER;char * parseServiceType_getProcedence(BYTE b)swi
20、tch(b5)/獲取服務類型字段中優(yōu)先級子域case 7: return Network Control;/網絡控制break;case 6:return Internet work Control; /網絡控制break;case 5:return CRITIC/ECP; break;case 4:return Flash Override;/最優(yōu)先信號break;case 3: return Flsah; break;case 2:return Immediate; break;case 1:return Priority;/協(xié)議break;case 0:return Routine;/路
21、由break;default:return Unknow;break;char * parseServiceType_getTOS(BYTE b)b=(b1)&0x0f;/獲取服務類型字段中的TOS子域switch(b) case 0:return Normal service; /正常運行break;case 1:return Minimize monetary cost; /成本break;case 2:return Maximize reliability; /可靠性break;case 4:return Maximize throughput; /吞吐量break;case 8:ret
22、urn Minimize delay; /延遲break;case 15:return Maximize security; /安全性break; default:return Unknow; char * getProtocol(BYTE Protocol) /獲取協(xié)議字段共8位switch(Protocol) /以下為協(xié)議號說明: case 1:return ICMP; /Internet控制報文協(xié)議case 2:return IGMP; /Internet組管理協(xié)議case 4: return IP in IP;/移動IP數據封裝和隧道case 6:return TCP;/傳輸控制協(xié)議c
23、ase 8:return EGP;/外部網關協(xié)議case 17:return UDP;/用戶數據報文協(xié)議case 41:return IPv6;case 46:return RSVP;/資源預留協(xié)議case 89:return OSPF;/Open Shortest Path First 開發(fā)式最短路徑優(yōu)先default:return UNKNOW;void ipparse(FILE* file,char* buffer)IP_HEADER ip=*(IP_HEADER*)buffer; /通過指針把緩沖區(qū)的內容強制轉化為IP_HEADER數據結構fseek(file,0,SEEK_END);
24、 fprintf(file,_rn);fprintf(file,版本號:IPV%drn,ip.Version4);fprintf(file,報頭標長:%d (BYTE)rn,(ip.HdrLen & 0x0f)*4);fprintf(file,服務器類型 : %s,%srn,parseServiceType_getProcedence(ip.ServiceType), parseServiceType_getTOS(ip.ServiceType);fprintf(file,總長度 : %d(BYTE)rn,ip.TotalLen);fprintf(file,標識 : %drn,ip.ID);f
25、printf(file,標志位 DF:%d , MF=%drn,(ip.Flags14)&0x01),(ip.Flags13)&0x01);fprintf(file,分段偏移值 : %drn,(ip.FragOff&0x1fff); fprintf(file,生存期 : %d (hops)rn,ip.TimeToLive);fprintf(file,協(xié)議 : %srn,getProtocol(ip.Protocol);fprintf(file,頭校驗和 : 0x%0xrn,ip.HdrChksum);fprintf(file,源IP地址 : %srn,inet_ntoa(*(in_addr*)
26、&ip.SrcAddr);fprintf(file,目的IP地址 : %srn,inet_ntoa(*(in_addr*)&ip.DstAddr);fprintf(file,_rn);int main()FILE * file;if(file=fopen(logfile.txt,wb+)=NULL)printf(fail to open file %s);return -1;WORD rv;WSADATA WSAData; /定義了能夠儲存WSAStarup調用返回值的結構rv=MAKEWORD(2,2); /Winsock2版本WSAStartup(rv,&WSAData);SOCKET s
27、ock=socket(AF_INET,SOCK_RAW,IPPROTO_IP); /創(chuàng)建套接字,sock為套接字描述符BOOL flag=true;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag);/任意類型、任意狀態(tài)套接口的設置選項值char hostName128;gethostname(hostName,100); /獲取主機名hostent * pHostIP;/獲取本地IP地址pHostIP = gethostbyname(hostName);sockaddr_in addr_in;addr_in.sin_addr=*(in_addr *)pHostIP-h_addr_list0;addr_in.sin_family = AF_INET;addr_in.sin_port = htons(6000); /將無符號短整型主機數據轉換為網絡字節(jié)順序數據bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in);DWORD dwBufferLen10; /設置網卡為混雜模式 DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(sock, IO_RCVALL,&dwBufferInLen,sizeof(dwBu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深圳市二手房裝修工程施工合同
- 跨國(非獨占)品牌授權合作合同專業(yè)版
- 勞動合同判例解析:合同糾紛與法律適用
- 實習生實習與就業(yè)合同書
- 反擔保責任合同模板
- 購銷合同的反擔保書
- 全球商標使用權轉讓合同
- 實習人員合同范本
- 終止建筑工程合同協(xié)議書
- 企業(yè)學徒工用工合同范本
- 開學安全第一課主題班會課件
- 一年級珍惜糧食主題班會學習教案
- 新版《醫(yī)療器械經營質量管理規(guī)范》(2024)培訓試題及答案
- 2025年人教版數學五年級下冊教學計劃(含進度表)
- 海岸動力學英文課件Coastal Hydrodynamics-復習
- 碳足跡研究-洞察分析
- 硬質巖層組合切割開挖技術
- 2024解析:第二章聲現象-講核心(解析版)
- 2024年考研管理類綜合能力(199)真題及解析完整版
- 2025年初級社會工作者綜合能力全國考試題庫(含答案)
- 2024解析:第十章 浮力綜合應用-講核心(解析版)
評論
0/150
提交評論