版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
計算機網(wǎng)絡課程設計報告解析IP數(shù)據(jù)包問題描述設計一個解析IP數(shù)據(jù)包的程序,并根據(jù)這個程序,說明IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問題,從而對IP層的工作原理有更好的理解和認識。本設計的目標是捕獲網(wǎng)絡中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標準輸出上,并同時寫入日志文件。(1)以命令行形式運行:ipparselogfile,其中ipparse是程序名,而logfile則代表記錄結(jié)果的日志文件。(2)在標準輸出和日志文件中寫入捕獲的IP包的版本、頭長度、服務類型、數(shù)據(jù)包總長度、數(shù)據(jù)包標識、分段標志、分段偏移值、生存時間、上層協(xié)議類型、頭校驗和、源IP地址和目的地址等內(nèi)容。(3)當程序收到鍵盤輸入Ctrl+C時退出。概要設計(1)本程序主要由三部分構(gòu)成:初始化原始套接字,反復監(jiān)聽捕獲數(shù)據(jù)包和解析數(shù)據(jù)包。(2)為了獲取網(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)卡設置為混雜模式。(3)流程圖如下:詳細設計本程序主要由三部分構(gòu)成:初始化原始套接字,反復監(jiān)聽捕獲數(shù)據(jù)包和解析數(shù)據(jù)包。下面就結(jié)合核心代碼對程序的具體實現(xiàn)進行講解,同時使程序流程更加清晰,去掉了錯誤檢查等保護性代碼。使用原始套接字套接字分為三種,即流套接字(StreamSocket)、數(shù)據(jù)報套接字(DatagramSocket)和原始套接字(RawSocket)。要進行IP數(shù)據(jù)包的接受與發(fā)送,應使用原始套接字。創(chuàng)建原始套接字的代碼如下:SOCKETsock;Sock=WSASoccet(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERRLAPPED);在WSASoccet函數(shù)中,第一個參數(shù)指定通信發(fā)生的區(qū)字段,AF_INET是針對Internet的,允許在遠程主機之間通信。第二個參數(shù)是套接字的類型,AF_INET地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三種套接字類型。在這里,我們設置為SOCK_RAW,表示我們聲明的是一個原始套接字類型。第三個參數(shù)依賴于第二個參數(shù),用于指定套接字所用的特定協(xié)議這里使用IP協(xié)議。第四個參數(shù)為WSAPROTOCOL_INFO位,該位可以置空,永遠置0。第六個參數(shù)是標志位,WSA_FLAG_OVERRLAPPED表明可以使用發(fā)送接收超時設置,本課程設計也可以把這個標志位設置為NULL,因為本設計不用考慮超時情況。創(chuàng)建原始套接字后,IP頭就會包含在接收的數(shù)據(jù)中。然后,我們可以設置IP頭操作選項,調(diào)用sotscockpot函數(shù)。其中flag設置為TRUE,并設定IP_HDRINCL選項,表明用戶可以親自對IP頭進行處理。BOOLflag=true;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));之后,使用如下代碼完成對socket的初始化工作//獲取主機名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_TNET;addr-in.sin_port=htons(6000);//綁定socketbind(sock,(POSCKADDR)&addr_in,sizeof(addr_in));填寫sockaddr_in的內(nèi)容時,其地址值應填寫為本機IP地址可以通過gethostbyname()函數(shù)獲?。欢丝谔柨梢噪S便填寫,但不能與系統(tǒng)沖突;協(xié)議族應填寫為AF_INET。注意,sockaddr_in結(jié)構(gòu)的值必須是以網(wǎng)絡字節(jié)順序表示的值,而不能直接使用本機字節(jié)順序的值,使用htoms()函數(shù)可以將無符號短整型的主機數(shù)據(jù)轉(zhuǎn)換為網(wǎng)絡字節(jié)的順序的數(shù)據(jù)。最后使用bind()函數(shù)將socket綁定到本地網(wǎng)卡上。綁定網(wǎng)卡后,需要WSAIoctl()函數(shù)把網(wǎng)卡設置為混雜模式,使網(wǎng)卡能夠接收所有網(wǎng)絡數(shù)據(jù),其關(guān)鍵代碼如下:#defineSIO_RCVALL_WSAIOW(IOC_VENDOR,1)DWORDdwBufferLen[10];DWORDdwBufferInLen=1;DWORDdwBytesReturned=0;WSAIoctl(SnifferSocket,IO-RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,Sizeof(dwBufferLen),&dwByteReturned,NULL,NULL);如果接收的數(shù)據(jù)包中的協(xié)議類型和定義的原始套接字匹配,那么接收到的數(shù)據(jù)就拷貝到套接字中。因此,網(wǎng)卡就可以接收所有經(jīng)過的IP包。接收數(shù)據(jù)包在程序中可使用RECV()函數(shù)接收經(jīng)過的IP包。該函數(shù)有四個參數(shù),第一個參數(shù)接收操作所用的套接字描述符;第二個參數(shù)接收到緩沖區(qū)的地址;第二個參數(shù)接收緩沖區(qū)的地址;第三個參數(shù)接收緩沖區(qū)的大小,也就是所要接收的字節(jié)數(shù);第四個參數(shù)是一個附加標志,如果對所發(fā)送的數(shù)據(jù)沒特殊要求,直接設為0。因為IP數(shù)據(jù)包的最大長度是65536B,因此緩沖區(qū)的大小不能小于65535B。設置緩沖區(qū)后,可利用循環(huán)來反復監(jiān)聽接收IP包,用recv()函數(shù)接收功能的代碼如下:#dedineBUFFER_SIZE65535Charbuffer[BUFFER_SIZE];//設置緩沖區(qū)While(true){recv(sock,buffer,BUFFER_SIZE,0);//j接收數(shù)據(jù)包……3.定義IP頭部的數(shù)據(jù)結(jié)構(gòu)typedefstruct_IP_HEADER//定義IP頭{union{BYTEVersion;//版本前4位BYTEHdrLen;//報頭標長(后四位),IP頭長度};BYTEServiceType;//服務類型WORDTotalLen;//總長度WORDID;//標識union{WORDFlags;//標志W(wǎng)ordFragOff;//分段偏移};BYTETimeToLive;//生命期BYTEProtiocol;//協(xié)議WORDHdrChksum;//頭校驗和DWORDSrcAddr;//源地址DWORDDstAddr://目的地址BYTEOptions;//選項}IP_HEADER;這是我們只考慮IP頭部結(jié)構(gòu),不考慮數(shù)據(jù)部分。在捕獲IP數(shù)據(jù)包后,可以通過指針把緩沖區(qū)的內(nèi)容強制轉(zhuǎn)化為IP_HEADER數(shù)據(jù)結(jié)構(gòu)。IP_HEADERip=*(IP_HEADER*)buffer;4.IP包的解析解析IP包的字段有兩種策略。針對長度為8位、16位和32位的字段(或子字段)時,可以利用IP_HEADER的成員指教獲取。要解析長度不是9位倍數(shù)的字段(或子字段)時,可以利用C語言中的位移以及與、或操作完成。下面給出了通過IP_HEADER解析IP頭各個字段的代碼。//獲取版本字段ip.Version>>4; //獲取頭部長度字段ip.HdrLen&0x0f;//獲取服務類型字段中的優(yōu)先級子域ip.ServiceType>>5;//獲取服務類型字段中的TOS子域(IP.sERVICEtYPE>>1)&0X0F;//獲取總長度字段ip.TotalLEN;//獲取標識字段ip.ID;//解析標識字段DF=(ip.Flags>>14)&0x01;MF=(ip.Flags>>13)&0X01;//獲取分段偏移字段ip.FragOff&0x1fff;//獲取生存時間字段ip.TimeToLive;//獲取協(xié)議字段ip.Protocol;//獲取頭校驗和字段ip.HdrChksum;//解析源IP地址字段inet_ntoa(*(in_addr*)&ip.SrcAddr;//解析目的的IP地址字段inet_ntoa(*(in_addr*)&ip.DstAddr);調(diào)試分析(1)在學校的機房里還會捕獲到目的IP地址第四位為255的數(shù)據(jù)包,這是屬于子網(wǎng)廣播號。(2)不是所有的數(shù)據(jù)包都能捕獲,如:IP數(shù)據(jù)包以外的數(shù)據(jù)包都抓不到,只支持ICMP、TCP、UDP、IGMP等協(xié)議。(3)最初并不知道怎么使用套接字,通過解析IP數(shù)據(jù)包課程設計,基本掌握了用套接字編程來實現(xiàn)獲取并解析IP數(shù)據(jù)包的方法。心得體會組內(nèi)成員分工:尚文杰:編寫程序黃秀風:調(diào)試程序并參與完善程序曹秋爽:總結(jié)程序設計報告實習間的體會:通過本次課程設計,我充分運用了所學的計算機網(wǎng)絡知識并查閱了大量的案例,學到了很多知識,對計算機網(wǎng)絡有了更深入的了解,從一開始對套接字沒有任何認識,現(xiàn)在已能對套接字進行簡單的分析,以及IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問題,對IP層的工作原理也有了更好的學習,受益匪淺。在用VisualC++編程的這一步中,實在花了我的不少時間,這個我認為是在我這個設計中最難的一步,雖然在網(wǎng)上能找到相關(guān)程序,但所找到的那些程序都基本上有一兩處錯誤,而對于我這個只有一點VisualC++基礎的來說無疑是一個天大的麻煩。但是,經(jīng)過這兩周的努力,還是能改正了這些錯誤,終于把這個程
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)內(nèi)訓教育框架協(xié)議
- 2025年健身房會員權(quán)益分成協(xié)議
- 二零二五年度高端住宅主材代理采購合同2篇
- 二零二五版果園生態(tài)農(nóng)業(yè)觀光園承包協(xié)議3篇
- 2025年分銷渠道協(xié)議書格式
- 2025年度航空航天設備采購合同及后續(xù)維修保養(yǎng)協(xié)議4篇
- 二零二五年度鋼結(jié)構(gòu)廠房買賣及綠色建筑認證服務合同3篇
- 2025年水利工程清包合同范本:水利工程土地征用與拆遷補償3篇
- 2025年度煤礦安全生產(chǎn)責任保險合同11篇
- 2025鋼材貿(mào)易購銷合同
- 電梯安全守則及乘客須知
- IT硬件系統(tǒng)集成項目質(zhì)量管理方案
- 水下炸礁施工組織設計
- 《容幼穎悟》2020年江蘇泰州中考文言文閱讀真題(含答案與翻譯)
- 3dmin軟件3dmine教程基礎知識
- API520-安全閥計算PART1(中文版)
- 政府采購專家評審實務培訓XXXX
- 2023年廣東省廣州地鐵城際鐵路崗位招聘筆試參考題庫附帶答案詳解
- 2023年一級健康管理師《基礎知識》考前沖刺題庫資料(含答案)
- 直流電機電樞繞組簡介
- GB/T 524-2007平型傳動帶
評論
0/150
提交評論