解析IP數(shù)據(jù)包實(shí)驗(yàn)報(bào)告概要(共20頁(yè))_第1頁(yè)
解析IP數(shù)據(jù)包實(shí)驗(yàn)報(bào)告概要(共20頁(yè))_第2頁(yè)
解析IP數(shù)據(jù)包實(shí)驗(yàn)報(bào)告概要(共20頁(yè))_第3頁(yè)
解析IP數(shù)據(jù)包實(shí)驗(yàn)報(bào)告概要(共20頁(yè))_第4頁(yè)
解析IP數(shù)據(jù)包實(shí)驗(yàn)報(bào)告概要(共20頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上成都工業(yè)學(xué)院(課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告)院 系: 計(jì)算機(jī)工程系 課程名稱(chēng): 計(jì)算機(jī)網(wǎng)絡(luò) 設(shè)計(jì)名稱(chēng): 解析IP數(shù)據(jù)包 專(zhuān)業(yè)名稱(chēng): 網(wǎng)絡(luò)工程 班 級(jí): 姓 名: 牟黎明 學(xué) 號(hào): 11 指導(dǎo)老師: 劉枝盛老師 成 績(jī): 設(shè)計(jì)時(shí)間:2014年12月22日2014年12月26日成都工業(yè)學(xué)院課程設(shè)計(jì)任務(wù)書(shū)課程名稱(chēng)計(jì)算機(jī)網(wǎng)絡(luò)課程代碼設(shè)計(jì)題目解析IP數(shù)據(jù)包(visual2012編譯)題目序號(hào)7設(shè)計(jì)時(shí)間2014年12月22日2014年12月26日系(院)計(jì)算機(jī)工程系專(zhuān)業(yè)網(wǎng)絡(luò)工程班級(jí)一、課程設(shè)計(jì)任務(wù)(條件)、具體技術(shù)參數(shù)(指標(biāo))深入理解計(jì)算機(jī)網(wǎng)絡(luò)基本原理,將書(shū)本上抽象的概念與具體的實(shí)現(xiàn)技術(shù)相結(jié)

2、合,體會(huì)網(wǎng)絡(luò)協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,以及專(zhuān)業(yè)技術(shù)人員所使用的基本方法和技巧;熟悉相關(guān)應(yīng)用開(kāi)發(fā)工具,掌握網(wǎng)絡(luò)協(xié)議應(yīng)用開(kāi)發(fā)技術(shù);掌握網(wǎng)絡(luò)規(guī)劃與設(shè)計(jì)的基本方法;培養(yǎng)一定的自學(xué)能力和獨(dú)立分析問(wèn)題、解決問(wèn)題的能力;對(duì)設(shè)計(jì)中遇到的問(wèn)題,能通過(guò)獨(dú)立思考、查閱資料、參考文獻(xiàn),尋求解決方案。每位同學(xué)從給出的題目中任選其一,但對(duì)同一班級(jí)同學(xué)來(lái)說(shuō)。每位同學(xué)對(duì)選的題目要求獨(dú)立完成,且對(duì)編碼的系統(tǒng)要求: 1:盡量采用圖形界面實(shí)現(xiàn)。 2:程序代碼書(shū)寫(xiě)規(guī)范,有充足的注釋。 3:綠色軟件:程序運(yùn)行不需安裝,避免寫(xiě)系統(tǒng)和注冊(cè)表:。 4:開(kāi)發(fā)平臺(tái)、開(kāi)發(fā)語(yǔ)言不限。 5:明確題目的意圖,設(shè)計(jì)上應(yīng)有足夠的工作量二、對(duì)課程設(shè)計(jì)成果的要求(

3、包括課程設(shè)計(jì)說(shuō)明書(shū)、圖紙、圖表、實(shí)物等軟硬件要求),考核要求1、需要做一個(gè)可以捕獲經(jīng)過(guò)本電腦IP數(shù)據(jù)包的軟件,然后進(jìn)行解析,解析內(nèi)容項(xiàng)為:版本、頭長(zhǎng)度、服務(wù)類(lèi)型、數(shù)據(jù)長(zhǎng)度、分段標(biāo)志、DF、MF、分段偏移值、生存期、協(xié)議、頭校驗(yàn)和、源IP地址、目的IP地址。2、程序不需要再控制臺(tái)命令下去運(yùn)行,可直接打開(kāi),每次解析2次(作對(duì)比,比較理論上固定不變的值,以此來(lái)排除軟件bug),解析后可按1號(hào)鍵選擇繼續(xù)解析,也可按2號(hào)鍵退出程序。3、解析完畢后,退出程序,本程序?qū)⒆詣?dòng)生成一個(gè)history.txt文件,以此記錄解析結(jié)果。三、課程設(shè)計(jì)工作進(jìn)度計(jì)劃:第一天:按照老師推薦的參考書(shū),了解本實(shí)驗(yàn)的目的和意義,分

4、析核心代碼,并將所有參考代碼輸入電腦。第二天:調(diào)試書(shū)上的參考代碼,弄懂每句的意義,以及本程序調(diào)用了那些庫(kù)函數(shù),每個(gè)庫(kù)函數(shù)的意義,最終通過(guò)調(diào)試。第三天:因?yàn)樵创a程序必須在控制臺(tái)命令下運(yùn)行,我需修改主函數(shù)代碼,使其不需要在控制臺(tái)命令下就可運(yùn)行。第四天:使其不需要在控制臺(tái)命令下運(yùn)行修改成功后,但不可控,及打開(kāi)后就運(yùn)行,不能控制,我添加代碼,使其必須為在我輸入正確的命令符后才能進(jìn)入程序,開(kāi)始運(yùn)行。第五天:因?yàn)檫M(jìn)入后他自己無(wú)限抓包解析,人工停止后不可再繼續(xù),我添加代碼,使其每次抓包、解析2次,自動(dòng)停止,然后根據(jù)用戶(hù)需求,選擇是否繼續(xù)抓包解析,不用退出后再次抓包。完成后并且在老師處通過(guò)驗(yàn)收。四、主要參考

5、資料:1吳功宜 吳英 等編著.計(jì)算機(jī)網(wǎng)課程設(shè)計(jì) 機(jī)械工業(yè)出版社 第2版2 謝希仁 編著 計(jì)算機(jī)網(wǎng)絡(luò) 電子工業(yè)出版社 第6版3 陳維興 林小茶 編著 C+面向?qū)ο笤O(shè)計(jì)程序設(shè)計(jì)教程 清華大學(xué)出版社 第3版4胡名 王紅梅 編著 程序設(shè)計(jì)基礎(chǔ)從問(wèn)題到程序 清華大學(xué)出版社 第1版指導(dǎo)教師(簽名):目錄一、課程設(shè)計(jì)的目的和意義.3二、課程設(shè)計(jì)的內(nèi)容和要求.3三、解析IP數(shù)據(jù)包設(shè)計(jì)的相關(guān)技術(shù).4l 3.1 IP數(shù)據(jù)包的格式與分析.4l 3.2 程序分析設(shè)計(jì).6l 3.2.1 網(wǎng)卡設(shè)置.6l 3.2.2 程序設(shè)計(jì).6l 3.2.3 程序設(shè)計(jì).7l 3.2.4 程序設(shè)計(jì).7l 3.2.5 程序設(shè)計(jì).7四、課程設(shè)

6、計(jì)過(guò)程.8l 4.1 程序流程圖.8l 4.2源程序代碼.9l 4.3 程序運(yùn)行結(jié)果.16l 4.3.1.登陸界面,提示輸入命令符.16l 4.3.2.命令符輸入錯(cuò)誤后提示界面.16l 4.3.3.截獲的IP數(shù)據(jù)包界面.17l 4.3.4.繼續(xù)抓包圖.17五、課程設(shè)計(jì)小結(jié).18參考文獻(xiàn).18一、 課程設(shè)計(jì)的目的和意義目的:本章課程設(shè)計(jì)的目的就是設(shè)計(jì)一個(gè)解析IP數(shù)據(jù)包的程序(我的編輯環(huán)境為visual2102),并根據(jù)這個(gè)程序,說(shuō)明IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問(wèn)題,從而對(duì)網(wǎng)絡(luò)層的工作原理有更好的理解和認(rèn)識(shí)。意義:1、 有利于編程能力的提高在做設(shè)計(jì)的過(guò)程中,我再一次熟悉了開(kāi)發(fā)設(shè)計(jì)的基本流程,從

7、分析任務(wù)到確立整體框架再到確定算法,然后再一步步實(shí)現(xiàn)各函數(shù)的功能。從中,我熟悉了許多新的庫(kù)函數(shù),并提高了編程技巧。2、有利于基礎(chǔ)知識(shí)的理解在這次課程設(shè)計(jì)之前,我們已經(jīng)學(xué)完了網(wǎng)絡(luò)層的理論知識(shí),可是對(duì)它的理解很粗淺。之前只知道關(guān)于網(wǎng)絡(luò)層的一些概念性的東西??墒亲鐾暝O(shè)計(jì)后,我才從整體上理解了網(wǎng)絡(luò)層的框架,明白了網(wǎng)絡(luò)層的每一個(gè)組成部分都是有它特定的功能和意義的,從而對(duì)網(wǎng)絡(luò)層協(xié)議有了更深入的理解。3、有利于邏輯思維的鍛煉程序設(shè)計(jì)能直接有效地訓(xùn)練我們的創(chuàng)新思維,培養(yǎng)分析問(wèn)題、解決問(wèn)題的能力。即使一個(gè)簡(jiǎn)單的程序,從任務(wù)分析、確定算法、界面布局、編寫(xiě)代碼到調(diào)試運(yùn)行,整個(gè)過(guò)程學(xué)生都需要有條理地構(gòu)思,這中間有猜測(cè)

8、設(shè)想、判斷推理的抽象思維訓(xùn)練,也有分析問(wèn)題、解決問(wèn)題、預(yù)測(cè)目標(biāo)等能力的培養(yǎng)。二、 課程設(shè)計(jì)的內(nèi)容和要求本設(shè)計(jì)的目標(biāo)是捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫(xiě)入日志文件。程序的具體要求如下:1)打開(kāi)本程序,根據(jù)提示,輸入命令符ParsePacket,開(kāi)始抓包。獲取經(jīng)過(guò)本機(jī)的ip數(shù)據(jù)。若輸入錯(cuò)誤,將退出重新打開(kāi)才行。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)第一次抓包完成后,可按1號(hào)鍵選擇再次抓包,也可按2號(hào)鍵選擇退出。三

9、、解析IP數(shù)據(jù)包設(shè)計(jì)的相關(guān)技術(shù)3.1 IP數(shù)據(jù)包的格式與分析互聯(lián)網(wǎng)層是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ù)包格式,以消除各通信子網(wǎng)間的差異,從而為信息發(fā)送方和接收方提供了透明的傳輸通道。編制本程序前,首先要對(duì)IP包的格式有一定的了解。圖(1)給出了IP協(xié)議的數(shù)據(jù)包格式。IP數(shù)據(jù)包的第一字段是版本字段,其長(zhǎng)度為4位,表示所使用的IP協(xié)議的版本。目前的版本IPV4,版本字段的值為4,下一代的版本是IPV6,版本字段的值為6。本程序主要針對(duì)版本值為4的I

10、P數(shù)據(jù)包的解析。報(bào)頭標(biāo)長(zhǎng)(IHL)字段為4位,它定義了以4B為一個(gè)單位的IP包的報(bào)頭長(zhǎng)度。報(bào)頭除了選項(xiàng)字段和填充域字段外,其他各字段是定長(zhǎng)的。因此,IP數(shù)據(jù)包的頭長(zhǎng)度在20-40B之間,是可變的。04 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)(0或多項(xiàng))填充數(shù)據(jù)部分圖1IP數(shù)據(jù)包的格式服務(wù)類(lèi)型字段共8位,用于指示路由器如何處理該數(shù)據(jù)包。該字段長(zhǎng)度由4位服務(wù)類(lèi)型(TOS)子域和3位優(yōu)先級(jí)(b7 b6 b5)(precedence)子域組成,1位為保留位,該字段結(jié)構(gòu)如圖(2)所示:b7 b6 b5 b4 b3 b

11、2 b1 b0優(yōu)先級(jí)DTRC0圖2服務(wù)類(lèi)型字段結(jié)構(gòu)優(yōu)先級(jí)共有關(guān)8種,優(yōu)先級(jí)越高表明數(shù)據(jù)包越重要。圖(3)列出了各種優(yōu)先級(jí)所代表的意義。位數(shù)(b7b6b5)意義111網(wǎng)絡(luò)控制110網(wǎng)絡(luò)間控制101重要(CRITIC/ECP)100即時(shí)、優(yōu)先011即時(shí)010立刻001優(yōu)先000普通圖3優(yōu)先級(jí)子域的說(shuō)明在4位服務(wù)類(lèi)型子域中,b4 b3 b2 b1分別表示D(延遲)、T(吞吐量)、R(可靠性)與(成本)。表圖(4)列出了服務(wù)類(lèi)型子域的構(gòu)成。位數(shù)(b4 b3 b2 b1)意義1111安全1000延遲最小0100吞吐量最大0010可靠性最大0001成本最小0000普通服務(wù)圖4列出了服務(wù)類(lèi)型子域總長(zhǎng)度字段為

12、2B,它定義了以字節(jié)為單位的數(shù)據(jù)包的總長(zhǎng)度。IP數(shù)據(jù)包的最大長(zhǎng)度為216 =65535B。標(biāo)識(shí)字段長(zhǎng)度為16位,用于識(shí)別IP數(shù)據(jù)包的編號(hào)。每批數(shù)據(jù)都有一個(gè)標(biāo)識(shí)值,用于讓目的主機(jī)判斷新來(lái)的數(shù)據(jù)屬于哪個(gè)分組。報(bào)頭中的標(biāo)志字段如圖(5)所示。標(biāo)志字段共3位,最高位是0,禁止分片標(biāo)志DF字段的值若為1,表示不能對(duì)數(shù)據(jù)包分片;若DF值為0,則表明可以分片。分片標(biāo)志MF的值為1,表示接收到的不是最后一個(gè)分片;若MF值為0,表示接收到的是最后一個(gè)分片。0DFMF 圖5標(biāo)志字段的結(jié)構(gòu)片偏移字段共13位,說(shuō)明分片在整個(gè)數(shù)據(jù)包中的相對(duì)位置。片偏移值是8B為單位來(lái)計(jì)數(shù)的,因此選擇的分片長(zhǎng)度應(yīng)該是8B的整數(shù)倍。生存時(shí)

13、間(TTL)字段為8位,用來(lái)設(shè)置數(shù)據(jù)包在互聯(lián)網(wǎng)絡(luò)的傳輸過(guò)程的壽命,通常是用一個(gè)數(shù)據(jù)包可以經(jīng)過(guò)的最多的路由器跳步數(shù)來(lái)限定的。協(xié)議字段為8位,表示使用IP數(shù)據(jù)包的高層協(xié)議類(lèi)型 頭部驗(yàn)和字段為16位,用于存放檢查報(bào)頭錯(cuò)誤的校驗(yàn)碼。 3.2 程序分析設(shè)計(jì)3.2.1 網(wǎng)卡設(shè)置為了獲取網(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īng),也就是說(shuō)應(yīng)用程序

14、無(wú)法收取與自己無(wú)關(guān)的數(shù)據(jù)包。我們要想獲取網(wǎng)絡(luò)設(shè)備的所有數(shù)據(jù)包,就是需要將網(wǎng)卡設(shè)置為混雜模式。3.2.2 程序設(shè)計(jì)本程序主要由三部分構(gòu)成:初始化原始套接字,反復(fù)監(jiān)聽(tīng)捕獲數(shù)據(jù)包和解析數(shù)據(jù)包。下面就結(jié)合核心代碼對(duì)程序的具體實(shí)現(xiàn)進(jìn)行分析,同時(shí)使程序流程更加清晰,去掉了錯(cuò)誤檢查等保護(hù)性代碼。3.2.3 使用原始套接字套接字分為三種,即流套接字(Stream socket)、數(shù)據(jù)報(bào)套接字(Datagram Socket)和原始套接字(Raw Socket)。要進(jìn)行IP層數(shù)據(jù)包的接收和發(fā)送,應(yīng)使用原始套接字。創(chuàng)建原始套接字的代碼如下:Socket sock:Sock=WSAsocket(af_inet,so

15、ck_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ù)。如果接收的數(shù)據(jù)包中的協(xié)議類(lèi)型和定義的原始套接字匹配,那么接收的數(shù)據(jù)就拷貝到套接字中,因此,網(wǎng)卡就可以接收所有經(jīng)過(guò)的IP包。3.2.4 接收

16、數(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.2.5 IP包的解析解析IP包的字段有兩種策略。針對(duì)長(zhǎng)度為8位、16位和32位的字段(或子字段)時(shí),可以利用IP-HEADER的成員直接獲取。要解析長(zhǎng)度不是8位倍數(shù)的字段(或子字段)

17、時(shí),可以利用C語(yǔ)言中的移位以人、及與、或操作完成。四、課程設(shè)計(jì)過(guò)程首先,分析任務(wù),明確該程序需要實(shí)現(xiàn)的功能;然后,根據(jù)該功能畫(huà)出相應(yīng)的程序流程圖;其次,打開(kāi)VS2012,用C、C+語(yǔ)言書(shū)寫(xiě)源代碼,并且進(jìn)行調(diào)試,直到得出正確的結(jié)果,并對(duì)程序的最后運(yùn)行結(jié)果進(jìn)行截圖;最后,完成課程設(shè)計(jì)報(bào)告。4.1 程序流程圖如下:開(kāi) 始構(gòu)造程序運(yùn)行環(huán)境創(chuàng)建原始接字,并初始化捕獲IP包再次捕獲IP包解析IP數(shù)據(jù)包結(jié) 束解析并顯示IP信息選擇1選擇2圖6程序流程圖4.2源程序代碼#include winsock2.h/windows socket(稱(chēng)作套接字,用于描述IP地址和端口,是一個(gè)通信鏈的句柄) 的頭文件 包括

18、/#define IPPROTO_IP 0 /* dummy for IP */#define IPPROTO_HOPOPTS 0 /* IPv6 hop-by-hop options */#define IPPROTO_ICMP 1 /* control message protocol */#define IPPROTO_IGMP 2 /* internet group management protocol */#define IPPROTO_GGP 3 /* gateway2 (deprecated) */#define IPPROTO_IPV4 4 /* IPv4 */#includ

19、e ws2tcpip.h /與IPv6相關(guān)的一個(gè)頭文件#include iostream#include stdio.husing namespace std;#pragma comment(lib,ws2_32.lib) /告訴編譯器在編譯形成的.obj文件和.exe文件中加一條信息,使得 鏈接器在鏈接庫(kù)的時(shí)候要去找wsock32.lib這個(gè)庫(kù),不要先去找別的庫(kù)。/定義IP頭部結(jié)構(gòu)typedef struct _IP_HEADER union BYTE Version; /版本(前4位) BYTE HdrLen; /IP頭部長(zhǎng)度(后4位) ; BYTE ServiceType; /服務(wù)類(lèi)型

20、WORD TotalLen; /總長(zhǎng)度 WORD ID; /標(biāo)志識(shí) union WORD Flags; /標(biāo)志(前3位) WORD FragOff; /分段偏移(后13位) ; BYTE TimeToLive; /生命期 BYTE Protocol; /協(xié)議 WORD HdrChksum; /頭校驗(yàn)和 DWORD SrcAddr; /源地址 DWORD DstAddr; /目的地址 BYTE Options; /選項(xiàng)IP_HEADER;/解析IP包的版本信息void getVersion(BYTE b, BYTE & version)version=b4; /右移運(yùn)算 /解析IP包的頭部長(zhǎng)度v

21、oid getIHL(BYTE b,BYTE & result)result=(b&0x0f)*4; /解析IP包的服務(wù)類(lèi)型char * parseServiceType_getProcedence(BYTE b)switch(b5) /“”代表右移運(yùn)算符 例如:14 2的值為3,因?yàn)?4(即二進(jìn)制的)向右移兩位等于3(即二進(jìn)制的)case 7: return Network Control; break;case 6:return Internet work Control; break;case 5:return CRITIC/ECP; break;case 4:return Flash

22、Override; break;case 3:return Flsah; break;case 2:return Immediate; break;case 1:return Priority; break;case 0:return Routine; break;default:return Unknow;break;/解析IP包的服務(wù)級(jí)別char * parseServiceType_getTOS(BYTE b)b=(b1)&0x0f; switch(b) case 0:return Normal service; break;case 1:return Minimize monetary

23、 cost; break;case 2:return Maximize reliability; break;case 4:return Maximize throughput; break;case 8:return Minimize delay; break;case 15:return Maximize security; break; default:return Unknow; /解析IP包的標(biāo)志位void getFlags(WORD w,BYTE & DF,BYTE & MF) DF=(w14)&0x01;MF=(w13)&0x01;/解析IP包的分段標(biāo)志位void getFrag

24、Off(WORD w,WORD & fragOff) fragOff=w&0x1fff;/解析IP包的協(xié)議類(lèi)型char * getProtocol(BYTE Protocol) switch(Protocol/*協(xié)議*/) case 1:return ICMP; case 2:return IGMP;case 4: return IP in IP;case 6:return TCP;case 8:return EGP;case 17:return UDP; case 41:return IPv6;case 46:return RSVP;case 89:return OSPF;default:r

25、eturn UNKNOW;/解析完畢,輸出結(jié)果,從電腦中讀取,并打印到屏幕void ipparse(FILE* file,char* buffer) /IP查詢(xún),分析 IP_HEADER ip=*(IP_HEADER*)buffer; fseek(file,0,SEEK_END); /解析IP包的版本信息 BYTE version; getVersion(ip.Version,version); fprintf(file,版本號(hào)=%drn,version); /解析IP包的頭部長(zhǎng)度 BYTE headerLen; getIHL(ip.HdrLen,headerLen); fprintf(fil

26、e,報(bào)頭標(biāo)長(zhǎng)=%d(BYTE)rn,headerLen); /解析IP包的服務(wù)類(lèi)型與等級(jí) fprintf(file,服務(wù)類(lèi)型=%s,%srn,parseServiceType_getProcedence(ip.ServiceType), parseServiceType_getTOS(ip.ServiceType); /解析IP的總長(zhǎng)度 fprintf(file,總長(zhǎng)度=%d(BYTE)rn,ip.TotalLen); /解析IP包的標(biāo)志符 fprintf(file,標(biāo)識(shí)=%drn,ip.ID); /解析IP包的標(biāo)志位 BYTE DF,MF; getFlags(ip.Flags,DF,MF);

27、 fprintf(file,標(biāo)志 DF=%d,MF=%drn,DF,MF); /解析IP包的分段偏移 WORD fragOff; getFragOff(ip.FragOff,fragOff); fprintf(file,分段偏移值=%drn,fragOff); /解析IP包的生存期 fprintf(file,生存期=%d(hopes)rn,ip.TimeToLive); /解析IP包的協(xié)議類(lèi)型 fprintf(file,協(xié)議=%srn,getProtocol(ip.Protocol); /解析IP包的頭部校驗(yàn)和 fprintf(file,頭校驗(yàn)和=0x%0xrn,ip.HdrChksum);

28、/解析IP包的IP地址 fprintf(file,源IP地址=%srn,inet_ntoa(*(in_addr*)&ip.SrcAddr); fprintf(file,目的IP地址=%srn,inet_ntoa(*(in_addr*)&ip.DstAddr); fprintf(file,*rn);/以下為主函數(shù)int main()/生成一個(gè)txt文件,作為記錄IP解析的數(shù)據(jù)int nRetCode = 0;FILE * file;if(file=fopen(history.txt,wb+)=NULL) printf(fail to open file %s);return -1; /fopen

29、函數(shù)(C語(yǔ)言書(shū)中講到)用來(lái)打開(kāi)一個(gè)文件,其調(diào)用的一般形式為:文件指針名=fopen(文件名,使用文件方式);/其中,“文件指針名”必須是被說(shuō)明為FILE類(lèi)型的指針變量/“文件名”是被打開(kāi)文件的文件名;/“使用文件方式”是指文件的類(lèi)型和操作要求?!拔募笔亲址A炕蜃址?dāng)?shù)組/初始化SocketWSADATA wsData;WSAStartup(MAKEWORD(2,2),&wsData);/建立原始SocketSOCKET sock;sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);/設(shè)置IP頭部操作選項(xiàng),flag設(shè)置為trueBOOL flag=TRUE;

30、setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag);/獲取本地主機(jī)名char hostName128;gethostname(hostName,100);/獲取本地主機(jī)IP地址hostent * pHostIP;pHostIP=gethostbyname(hostName);/填充SOCKADDR_IN結(jié)構(gòu)sockaddr_in addr_in;addr_in.sin_addr=*(in_addr*)pHostIP-h_addr_list0;addr_in.sin_family=AF_INET;addr_in.sin_

31、port=htons(6000);/把原始Socket綁定到本地網(wǎng)卡bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in); /設(shè)置SOCK_RAW為SIO_RCVALL,接收所有的IP包DWORD dwValue=1;#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)DWORD dwBufferLen10;DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBuf

32、ferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);#define BUFFER_SIZE 65535/監(jiān)聽(tīng)經(jīng)過(guò)本機(jī)的IP包c(diǎn)har bufferBUFFER_SIZE;printf(請(qǐng)輸入命令符ParsePacket開(kāi)始抓包!n);char a20; gets_s(a);if(strcmp(a,ParsePacket)=0)printf(開(kāi)始解析經(jīng)過(guò)本機(jī)的IP數(shù)據(jù)包,請(qǐng)您耐心等待,如果半天沒(méi)反應(yīng),可能為網(wǎng)絡(luò)未連接,解析較慢:n);while(true)int size=recv(sock,buffer,BUFFER_SIZE,0);i

33、f (size0)ipparse(stdout,buffer);ipparse(file,buffer);printf(請(qǐng)選擇是否繼續(xù),1:繼續(xù); 2,退出。n);char b20;gets_s(b);if (strcmp(b,1)=0)ipparse(stdout,buffer);ipparse(file,buffer); elsereturn 0;fclose(file); /文件關(guān)閉return 0;elseprintf(您的輸入有誤,請(qǐng)退出后從新打開(kāi)本程序!n);system(pause);return nRetCode;4.3程序運(yùn)行結(jié)果4.3.1.圖為登陸界面,提示輸入命令符:ParsePacket圖7程序的運(yùn)行方式4.3.2.命令符輸入錯(cuò)誤后將提示你輸入有誤,不能進(jìn)入:4.3.3.命令符輸入正確后進(jìn)入本程序進(jìn)行抓包,圖為截獲的IP數(shù)據(jù)包:解析: 版本= 4,表示版本是IPv4; 頭長(zhǎng)度= 20(BYTE),表示報(bào)頭字段為20

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論