版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、成都工業(yè)學(xué)院(課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告)院 系:計(jì)算機(jī)工程系課程名稱:計(jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)名稱:解析IP數(shù)據(jù)包專業(yè)名稱:網(wǎng)絡(luò)工程班級(jí):1305022姓 名:牟黎明學(xué)號(hào):11指導(dǎo)老師:劉枝盛老師成 績:設(shè)計(jì)時(shí)間:2014年12月22日一2014年12月26日成都工業(yè)學(xué)院計(jì)算機(jī)工程系1305022班 牟黎明(2013511237)11號(hào)成都工業(yè)學(xué)院課程設(shè)計(jì)任務(wù)書課程名稱計(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ī)工程系專業(yè)網(wǎng)絡(luò)工程|班級(jí)1305022一、課程設(shè)計(jì)任務(wù)(條件)、具體技術(shù)參數(shù)(指標(biāo))深入理解計(jì)算機(jī)網(wǎng)
2、絡(luò)基本原理,將書本上抽象的概念與具體的實(shí)現(xiàn)技術(shù)相結(jié)合,體會(huì)網(wǎng)絡(luò)協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)過程,以及專業(yè)技術(shù)人員所使用的基本方法和技巧; 熟悉相關(guān)應(yīng)用開發(fā)工具, 掌握網(wǎng)絡(luò)協(xié) 議應(yīng)用開發(fā)技術(shù);掌握網(wǎng)絡(luò)規(guī)劃與設(shè)計(jì)的基本方法; 立雋一定的自學(xué)能力和獨(dú)立分析問題、 解決問題 的能力;對(duì)設(shè)計(jì)中遇到的問題,能通過獨(dú)立思考、查閱資料、參考文獻(xiàn),尋求解決方案。每位同學(xué)從給出的題目中任選其一, 但對(duì)同一班級(jí)同學(xué)來說。 每位同學(xué)對(duì)選的題目要求獨(dú)立完成,且對(duì)編碼的系統(tǒng)要求:1 :盡量采用圖形界面實(shí)現(xiàn)。2 :程序代碼書寫規(guī)范,有充足的注釋。3 :綠色軟件:程序運(yùn)行不需安裝,避免寫系統(tǒng)和注冊(cè)表 :。4 :開發(fā)平臺(tái)、開發(fā)語言不限。5
3、 :明確題目的意圖,設(shè)計(jì)上應(yīng)有足夠的工作量二、對(duì)課程設(shè)計(jì)成果的要求(包括課程設(shè)計(jì)說明書、圖紙、圖表、實(shí)物等軟硬件要求),考核要求1、需要做一個(gè)可以捕獲經(jīng)過本電腦IP數(shù)據(jù)包的軟件,然后進(jìn)行解析,解析內(nèi)容項(xiàng)為:版本、頭長度、服務(wù)類型、數(shù)據(jù)長度、分段標(biāo)志、DF、MF分段偏移值、生存期、協(xié)、議、頭校驗(yàn)和、源IP地址、目的IP地址。2、程序不需要冉控制臺(tái)命令卜去運(yùn)行,可直接打開,每次解析2次(作對(duì)比,比較理論上固定不義的值,以此來排除軟件 bug),解析后可按1號(hào)鍵選擇繼續(xù)解析,也可按 2號(hào)鍵退出程序。3、解析完畢后,退出程序,本程序?qū)⒆詣?dòng)生成一個(gè)history.txt 文件,以此記錄解析結(jié)果。三、課程
4、設(shè)計(jì)工作進(jìn)度計(jì)劃:第一天:按照老師推薦的參考書,了解本實(shí)驗(yàn)的目的和意義,分析核心代碼,并將所有參考代碼輸入電腦。第二天:調(diào)試書上的參考代碼,弄懂每句的意義,以及本程序調(diào)用了那些庫函數(shù),每個(gè)庫函數(shù)的意義,最終通過調(diào)試。第三天:因?yàn)樵创a程序必須在控制臺(tái)命令下運(yùn)行,我需修改主函數(shù)代碼, 使其不需要在控制臺(tái)命令卜就可運(yùn)行。第四天:使其不需要在控制臺(tái)命令下運(yùn)行修改成功后,但不可控,及打開后就運(yùn)行,不能控制,我 添加代碼,使其必須為在我輸入正確的命令符后才能進(jìn)入程序,開始運(yùn)行。第五天:因?yàn)檫M(jìn)入后他自己無限抓包解析,人工停止后/、可再繼續(xù),我添加代碼,使其每次抓包、 解析2次,自動(dòng)停止,然后根據(jù)用戶需求,
5、選擇是否繼續(xù)抓包解析,不用退出后再次抓包。完成后并 且在老師處通過驗(yàn)收。四、主要參考資料:1吳功宜 吳英 等編著.計(jì)算機(jī)網(wǎng)課程設(shè)計(jì)機(jī)械工業(yè)出版社第2版2謝希仁編著計(jì)算機(jī)網(wǎng)絡(luò)電子工業(yè)出版社第6版3陳維興林小茶編著C+對(duì)同對(duì)象設(shè)計(jì)一程序設(shè)計(jì)教程清華大學(xué)出版社第3版4胡名王紅梅編著程序設(shè)計(jì)基礎(chǔ)一從問題到程序清華大學(xué)出版社第1版指導(dǎo)教師(簽名)目錄一、課程設(shè)計(jì)的目的和意義 :.::;.3二、課程設(shè)計(jì)的內(nèi)容和要求 :.:.3三、解析IP數(shù)據(jù)包設(shè)計(jì)的相關(guān)技術(shù) :,:.:.43.1 ip數(shù)據(jù)包的格式與分析 :.43.2 程序分析設(shè)計(jì) :-:63.2.1 網(wǎng)卡設(shè)置:6-3.2.2 程序設(shè)計(jì)::.6-3.2.3
6、 程序設(shè)計(jì)::: 程序設(shè)計(jì):::7-3.2.5 程序設(shè)計(jì):::7.四、課程設(shè)計(jì)過程 .:.::/. -64.1 程序流程圖:.一164.2 源程序代碼:.:94.3 程序運(yùn)行結(jié)果 :.:164.3.1. 登陸界面,提示輸入命令符 :.:164.3.2. 命令符輸入錯(cuò)誤后提示界面 .:.:.164.3.3. 截獲的IP數(shù)據(jù)包界面 :.:.:174.3.4. 繼續(xù)抓包圖:.:1718五、課程設(shè)計(jì)小結(jié) :.:18參考文獻(xiàn)一、 課程設(shè)計(jì)的目的和意義目的:本章課程設(shè)計(jì)的目的就是設(shè)計(jì)一個(gè)解析IP數(shù)據(jù)包的程序(我的編輯環(huán)境為visual2102,并根據(jù)這個(gè)程序,說明IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的
7、相關(guān)問題,從 而對(duì)網(wǎng)絡(luò)層的工作原理有更好的理解和認(rèn)識(shí)。意義:1、有利于編程能力的提高在做設(shè)計(jì)的過程中,我再一次熟悉了開發(fā)設(shè)計(jì)的基本流程, 從分析任務(wù)到確 立整體框架再到確定算法,然后再一步步實(shí)現(xiàn)各函數(shù)的功能。從中,我熟悉了許 多新的庫函數(shù),并提高了編程技巧。2、有利于基礎(chǔ)知識(shí)的理解在這次課程設(shè)計(jì)之前,我們已經(jīng)學(xué)完了網(wǎng)絡(luò)層的理論知識(shí), 可是對(duì)它的理解 很粗淺。之前只知道關(guān)于網(wǎng)絡(luò)層的一些概念性的東西。 可是做完設(shè)計(jì)后,我才從 整體上理解了網(wǎng)絡(luò)層的框架,明白了網(wǎng)絡(luò)層的每一個(gè)組成部分都是有它特定的功 能和意義的,從而對(duì)網(wǎng)絡(luò)層協(xié)議有了更深入的理解。3、有利于邏輯思維的鍛煉程序設(shè)計(jì)能直接有效地訓(xùn)練我們的創(chuàng)
8、新思維,培養(yǎng)分析問題、解決問題的能 力。即使一個(gè)簡單的程序,從任務(wù)分析、確定算法、界面布局、編寫代碼到調(diào)試 運(yùn)行,整個(gè)過程學(xué)生都需要有條理地構(gòu)思, 這中間有猜測(cè)設(shè)想、判斷推理的抽象 思維訓(xù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í)寫入日志文件。程序的具體要求如下:1)打開本程序,根據(jù)提示,輸入命令符 ParsePacket ,開始抓包。獲取 經(jīng)過本機(jī)的ip數(shù)據(jù)。若輸入錯(cuò)誤,將退出重新打開才行。2)在標(biāo)準(zhǔn)輸出和日志文件中寫入捕獲的IP包的版本、頭長度、服務(wù)類型、 數(shù)據(jù)包總長度、數(shù)
9、據(jù)包標(biāo)識(shí)、分段標(biāo)志、分段偏移值、生存時(shí)間、上層協(xié)議類型、 頭校驗(yàn)和、源IP地址和目的IP地址等內(nèi)容。3)第一次抓包完成后,可按1號(hào)鍵選擇再次抓包,也可按2號(hào)鍵選擇退出。三、解析IP數(shù)據(jù)包設(shè)計(jì)的相關(guān)技術(shù)3.1 IP數(shù)據(jù)包的格式與分析互聯(lián)網(wǎng)層是TCP/IP協(xié)議參考模型中的關(guān)鍵部分。IP協(xié)議把傳輸層送來的消 息組裝成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
10、數(shù)據(jù)包的第一字段是版本字段,其長度為 4位,表示所使用的IP協(xié)議的 版本。目前的版本IPV4,版本字段的值為4,下一代的版本是IPV6,版本字段 的值為6。本程序主要針對(duì)版本值為4的IP數(shù)據(jù)包的解析。報(bào)頭標(biāo)長(IHL)字段為4位,它定義了以4B為一個(gè)單位的IP包的報(bào)頭長度。 報(bào)頭除了選項(xiàng)字段和填充域字段外,其他各字段是定長的。因此, IP數(shù)據(jù)包的 頭長度在20-40B之間,是可變的。04816192431 (位)圖1IP數(shù)據(jù)包的格式服務(wù)類型字段共8位,用于指示路由器如何處理該數(shù)據(jù)包。該字段長度由4 位服務(wù)類型(TOS)子域和3位優(yōu)先級(jí)(b7 b6 b5)(precedence)子域組成,1位為
11、保 留位,該字段結(jié)構(gòu)如圖(2)所示:b7 b6b5b4b3b2b1bo優(yōu)先級(jí)D.11. T 11 R 一C0圖2服務(wù)類型字段結(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í)子域的說明在4位服務(wù)類型子域中,b4 b3 b2如分別表示D (延遲)、T (吞吐量)、R (可靠性)與(成本)。表圖(4)列出了服務(wù)類型子域的構(gòu)成。位數(shù)(b4 b3 b2 b1)意義1111安全1000延遲最小0100吞吐量最大0
12、010可靠性最大00010000成本最小普通服務(wù)圖4列出了服務(wù)類型子域總長度字段為2B,它定義了以字節(jié)為單位的數(shù)據(jù)包的總長度。IP數(shù)據(jù)包的 最大長度為216 =65535B。標(biāo)識(shí)字段長度為16位,用于識(shí)別IP數(shù)據(jù)包的編號(hào)。每批數(shù)據(jù)都有一個(gè)標(biāo)識(shí) 值,用于讓目的主機(jī)判斷新來的數(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位,說明分片在整
13、個(gè)數(shù)據(jù)包中的相對(duì)位置。 片偏移值是8B 為單位來計(jì)數(shù)的,因此選擇的分片長度應(yīng)該是8B的整數(shù)倍。生存時(shí)間(TTL)字段為8位,用來設(shè)置數(shù)據(jù)包在互聯(lián)網(wǎng)絡(luò)的傳輸過程的壽 命,通常是用一個(gè)數(shù)據(jù)包可以經(jīng)過的最多的路由器跳步數(shù)來限定的。協(xié)議字段為8位,表示使用IP數(shù)據(jù)包的高層協(xié)議類型頭部驗(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ò)
14、接口,但卻不是發(fā)送到此地址的數(shù)據(jù)包,網(wǎng)絡(luò)接口在雎投遞地址并非自身地址之后將不引起響應(yīng),也就是說應(yīng)用程序無法收取與自己無關(guān)的 數(shù)據(jù)包。我們要想獲取網(wǎng)絡(luò)設(shè)備的所有數(shù)據(jù)包,就是需要將網(wǎng)卡設(shè)置為混雜模式。 3.2.2程序設(shè)計(jì)本程序主要由三部分構(gòu)成:初始化原始套接字,反復(fù)監(jiān)聽捕獲數(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)使用
15、原始套接字。創(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), 表明用戶可以親自對(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ù)包中
16、的協(xié)議類型和定義的原始套接字匹 配,那么接收的數(shù)據(jù)就拷貝到套接字中,因此,網(wǎng)卡就可以接收所有經(jīng)過的IP包。3.2.4 接收數(shù)據(jù)包在程序中可使用recv()函數(shù)接收經(jīng)過的IP包。該函數(shù)有四個(gè)參數(shù),第一個(gè) 參數(shù)接收操作所用的套接字描述符;第二個(gè)參數(shù)接收緩沖區(qū)的地址;第三個(gè)參數(shù)接收緩沖區(qū)的大小,也就是所要接收的字節(jié)數(shù);第四個(gè)參數(shù)是一個(gè)附加標(biāo)志,如 果對(duì)所發(fā)送的數(shù)據(jù)沒特殊要求,直接設(shè)為0o因?yàn)镮P數(shù)據(jù)包的最大長度是65535B ,因此緩沖區(qū)的大小不能小于 65535B。設(shè)置緩沖區(qū)后,可利用循環(huán)來 反復(fù)監(jiān)聽接收IP包,用recv()函數(shù)實(shí)現(xiàn)接收功能。3.2.5 IP包的解析解析IP包的字段有兩種策略。針
17、對(duì)長度為8位、16位和32位的字段(或子 字段)時(shí),可以利用IP-HEADER的成員直接獲取。要解析長度不是 8位倍數(shù)的 字段(或子字段)時(shí),可以利用C語言中的移位以人、及與、或操作完成。共18頁 第8 頁成都工業(yè)學(xué)院計(jì)算機(jī)工程系1305022班 牟黎明(2013511237)11號(hào)四、課程設(shè)計(jì)過程首先,分析任務(wù),明確該程序需要實(shí)現(xiàn)的功能;然后,根據(jù)該功能畫出相應(yīng) 的程序流程圖;其次,打開VS2012用C、C+郵言書寫源代碼,并且進(jìn)行調(diào)試, 直到得出正確的結(jié)果,并對(duì)程序的最后運(yùn)行結(jié)果進(jìn)行截圖; 最后,完成課程設(shè)計(jì) 報(bào)告。4.1 程序流程圖如下:解析IP數(shù)據(jù)包4.2 源程序代碼#include
18、"winsock2.h/windows socket(稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄 )的頭文件 包括/#define IPPROTO_IP0/* dummy for IP */#define IPPROTO_HOPOPTS0/* IPv6 hop-by-hop options */#define IPPROTO_ICMP1/* control message protocol */#define IPPROTO_IGMP2/* internet group managementprotocol */#define IPPROTO_GG
19、P3/* gateway(deprecated) */#define IPPROTOIPV44/* IPv4 */#include "ws2tcpip.h" 與IPv6相關(guān)的一個(gè)頭文件#include "iostream"#include "stdio.h"using namespacestd;#pragma comment(lib ,"ws2_32.lib")/告訴編譯器在編譯形成的.obj文件和.ex故件中加一條信息,使 得鏈接器在鏈接庫的時(shí)候要去找 wsock32.lib這個(gè)庫,不要先去找別的庫。共18頁 第
20、10 頁/標(biāo)志(前3位)分段偏移(后13位)/生命期/協(xié)議頭校驗(yàn)和/源地址目的地址/選項(xiàng)定義IP頭部結(jié)構(gòu)typedef struct _IP_HEADER unionBYTE Version;BYTE HdrLen;BYTE ServiceType;WORD TotalLen;WORD ID;unionWORD Flags;WORD FragOff;BYTE TimeToLive;BYTE Protocol;WORD HdrChksum;DWORD SrcAddr;DWORD DstAddr;BYTE Options;IP_HEADER;/版本(前4位)/IP頭部長度(后4位)服務(wù)類型/總長度
21、/標(biāo)志識(shí)成都工業(yè)學(xué)院計(jì)算機(jī)工程系1305022班 牟黎明(2013511237)11號(hào)/解析IP包的版本信息void getVersion(BYTE b, BYTE & version)version=b>>4; 右移運(yùn)算/解析IP包的頭部長度void getIHL(BYTE b, BYTE & result)result=(b&0x0f)*4;/解析IP包的服務(wù)類型char * parseServiceType_getProcedenceBYTE b)switch(b>>5)/ ">代表右移運(yùn)算符例如:14 >> 2
22、的值為3,因?yàn)?4 (即二進(jìn)制的00001110)向右移兩位等于3 (即二進(jìn)制的00000011)case7:return "Network Control"break;case6:return "Internet work Control"break;case5:return "CRITIC/ECP"break;case4:return "Flash Override"break;case3:return "Flsah"break;case2:return "Immediate&qu
23、ot;break;case1:return "Priority"break;case0:return "Routine"break;default:return "Unknow"break;/解析IP包的服務(wù)級(jí)別char * parseServiceType_getTOS(BYTE b)b=(b>>1)&0x0f;switch(b)case0:return "Normal service"break;case1:return "Minimize monetary cost"b
24、reak;case2:return "Maximize reliability"break;case4:return "Maximize throughput"break;case8:return "Minimize delay"break;case15:return "Maximize security"break;default:return "Unknow"/解析IP包的標(biāo)志位void getFlags(WORD w,BYTE & DF,BYTE & MF) DF=(w&g
25、t;>14)&0x01;MF=(w>>13)&0x01;/解析IP包的分段標(biāo)志位void getFragOff(WORD w,WORD & fragOff)fragOff =w&0x1fff;/解析IP包的協(xié)議類型char * getProtocol(BYTE Protocol)switch(Protocol/* 協(xié)議 */)case1:return "ICMP"case2:return "IGMP"case4:return "IP in IP"case6:return "T
26、CP"case8:return "EGP"case17:return "UDP"case41:return "IPv6"case46:return "RSVP"case89:return "OSPF"default:return "UNKNOW"/解析完畢,輸出結(jié)果,從電腦中讀取,并打印到屏幕 void ipparse(FILE* file,char* buffer) /IP查詢,分析IP_HEADER ip=*( IP_HEADER *)buffer;fseek(
27、file,0,SEEK_END);/解析IP包的版本信息BYTE version;getVersion(ip.Version,version);fprintf( file,"版本號(hào)=%dr'n" ,version);/解析IP包的頭部長度BYTE headerLen;getIHL(ip.HdrLen,headerLen);fprintf( file,"報(bào)頭標(biāo)長=%d(BYTE)缶n" ,headerLen);/解析IP包的服務(wù)類型與等級(jí)fprintf( file,"服務(wù)類型=%s,%srn",parseServiceType_
28、getProcedence(ip.ServiceType), parseServiceType_getTOS(ip.ServiceType);/解析IP的總長度fprintf( file,"總長度=%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);fprintf(file,"標(biāo)志 DF=%d,MF=%drn" ,DF,MF);/解析IP包的分段偏移WORD f
29、ragOff;getFragOff(ip.FragOff,fragOff);fprintf( file,"分段偏移值=%drn",fragOff);/解析IP包的生存期fprintf( file,"生存期=%d (hopes)rn",ip.TimeToLive);/解析IP包的協(xié)議類型fprintf( file,"協(xié)議=%srn",getProtocol(ip.Protocol);/解析IP包的頭部校驗(yàn)和fprintf( file,"頭校驗(yàn)和=0x%0xrn" ,ip.HdrChksum);/解析IP包的IP地址f
30、printf( 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+"
31、)=NULL ) printf( "fail to open file %s"); return -1; /fopen函數(shù)(C語言書中講到)用來打開一個(gè)文件,其調(diào)用的一般形式為:文件指針g=fopen (文件名,使用文件方式);/其中,文件指針名”必須是被說明為FILE類型的指針變量/文件名”是被打開文件的文件名;/使用文件方式”是指文件的類型和操作要求。文件名”是字符串常量或字符串?dāng)?shù)組/初始化SocketWSADATA wsData;WSAStartup(MAKEWORD (2,2),&wsData);/建立原始SocketSOCKET sock;sock=soc
32、ket(AF_INET ,SOCK_RAW ,IPPROTO_IP);/設(shè)置IP頭部操作選項(xiàng),flag設(shè)置為trueBOOL flag=TRUE;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
33、_addr=*(in_addr*)pHostIP->h_addr_list0;addr_in.sin_family=AF_INET ;addr_in.sin_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;DWO
34、RD dwBytesReturned=0;WSAIoctl(sock, IO_RCVALL ,&dwBufferInLen, sizeof(dwBufferInLen),&dwBufferLen, sizeof(dwBuff erLen),&dwBytesReturned, NULL ,NULL );#defineBUFFER_SIZE 65535監(jiān)聽經(jīng)過本機(jī)的IP包c(diǎn)har buffer BUFFER_SIZE;printf("請(qǐng)輸入命令符ParsePacketf始抓包! n");char a20;gets_s(a);if(strcmp(a,&qu
35、ot;ParsePacket')=0)printf("開始解析經(jīng)過本機(jī)的IP數(shù)據(jù)包,請(qǐng)您耐心等待,如果半天沒反 應(yīng),可能為網(wǎng)絡(luò)未連接,解析較慢:n");while(true)int size=recv(sock,buffer,BUFFER_SIZE ,0);if (size>0)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(
36、stdout,buffer);ipparse(file,buffer);elset return 0;fclose(file); 文件關(guān)閉 return 0;else(printf("您的輸入有誤,請(qǐng)退出后從新打開本程序!n");system('pause"); return nRetCode; 4.3程序運(yùn)行結(jié)果4.3.1. 圖為登陸界面,提示輸入命令符:ParsePacket圖7程序的運(yùn)行方式4.3. 2.命令符輸入錯(cuò)誤后將提示你輸入有誤,不能進(jìn)入:C:Ll sersAd mini stratorD es ktdp解析Ccniol eApplic aticrlDebu gC n soleAo.請(qǐng)輸入命令符白P"記七開始才“包1翩罐朋出后從新打林程序14.3. 3.命令符輸入正確后進(jìn)入本程序進(jìn)行抓包,圖為截獲的 IP數(shù)據(jù)包:解析:版本=4,表示版本是IPv4; 頭長度=20(BYTE),表示報(bào)頭字段為20 個(gè)字節(jié);服務(wù)類型=Routine,Normal service 表示服務(wù)類型為一般服務(wù);數(shù)據(jù)長度=15360(BYTE); 分段標(biāo)志DF=0, MF=0 表示數(shù)據(jù)報(bào)可以分片,并且是 最后一個(gè)分片;分段偏移值=0表示此分片在整個(gè)數(shù)據(jù)包
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【七年級(jí)下冊(cè)地理中圖版】第六章 我國的區(qū)域差異(提分小卷)-(原卷+解析版)
- 【七年級(jí)下冊(cè)地理粵教版】10.3 大洋洲概述 同步練習(xí)
- 自助餐廳銷售工作總結(jié)
- 二年級(jí)數(shù)學(xué)教學(xué)工作總結(jié)
- 2025銷售合同簽訂有些注意事項(xiàng)
- 2025土地整治項(xiàng)目設(shè)計(jì)合同
- 思維飛躍少兒邏輯思考與動(dòng)手能力提升
- 2025新車轉(zhuǎn)讓合同范本
- 如何利用技術(shù)手段提高客戶服務(wù)效率
- 2025年寧夏貨年從業(yè)資格證考試題目
- 黃金買賣合同范本
- 米-伊林《十萬個(gè)為什么》閱讀練習(xí)+答案
- 碎屑巖油藏注水水質(zhì)指標(biāo)及分析方法
- 【S洲際酒店婚禮策劃方案設(shè)計(jì)6800字(論文)】
- 醫(yī)養(yǎng)康養(yǎng)園項(xiàng)目商業(yè)計(jì)劃書
- 《穿越迷宮》課件
- 《C語言從入門到精通》培訓(xùn)教程課件
- 2023年中國半導(dǎo)體行業(yè)薪酬及股權(quán)激勵(lì)白皮書
- 2024年Minitab全面培訓(xùn)教程
- 社區(qū)電動(dòng)車棚新(擴(kuò))建及修建充電車棚施工方案(純方案-)
- 項(xiàng)目推進(jìn)與成果交付情況總結(jié)與評(píng)估
評(píng)論
0/150
提交評(píng)論