任務三計算機網絡試驗IP數據報捕獲與分析_第1頁
任務三計算機網絡試驗IP數據報捕獲與分析_第2頁
任務三計算機網絡試驗IP數據報捕獲與分析_第3頁
任務三計算機網絡試驗IP數據報捕獲與分析_第4頁
任務三計算機網絡試驗IP數據報捕獲與分析_第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、任務二網絡編程一、實驗目的捕獲本機網卡的IP包,對捕獲的IP包進行解析。要求必須輸出以下字段:版本 號、總長度、標志位、片偏移、協(xié)議、源地址和目的地址。二、實驗環(huán)境平臺:Windows 編程環(huán)境:VC 6.0 語言:C+三、實驗原理3.1數據報格式以太幀由一個包含三個字段的幀頭開始, 前兩個字段包含了物理地址,各六個 字節(jié),頭部的第三個字段包含了 16位的以太幀類型,幀頭后面是數據區(qū)。根據 幀類型可以判斷是哪種數據包,一般常用的有0X0080(IP數據包)、0X0806(ARP請求/應答)和0X8035(RARP請求/應答)三種類型。TCP/IP協(xié)議 簇中位于網絡層的協(xié)議,也是最為核心的協(xié)議。

2、所有的TCP, UDP, ICMP及IGMP 數據都以IP數據報格式傳輸。IP協(xié)議提供了無連接的、不可靠的數據傳輸服 務。同時IP協(xié)議的一個重要功能是為網絡上的包傳遞提供路由支持。TCP/IP協(xié)議使用IP數據報這個名字來指代一個互聯(lián)網數據包。IP數據報由兩部分組 成,前面的頭部和后面的數據區(qū),頭部含有描述該數據報的信息,包括源IP地 址和目的IP地址等。在IP數據報的報頭中的眾多信息可根據協(xié)議類型字段區(qū) 分出該數據包的類型,常用的有 TCP包、UDP包、ICMP包等,各格式分別如 下所示:ip數據報格式TCP數據報格式ICMP數據報格式數據報格式UDP.3.2捕獲數據包方法目前常用的捕獲數據包

3、的方法有原始套接字、 LibPcap、WinPcap和JPcap等方 法。本次實驗選用套接字方法。套接字是網絡應用編程接口。應用程序可以使用它進行網絡通信而不需要知道底層發(fā)生的細節(jié)。有時需要自己生成一些定制的數據包或者功能并希望繞開Socket提供的功能,原始套接字(RawSocket)滿足了這 樣的要求。原始套接字能夠生成自己的數據報文,包括報頭和數據報本身的內容。 通過原始套接字,可以更加自如地控制Windows下的多種協(xié)議,而且能夠對網絡 底層的傳輸機制進行控制。網絡數據包截獲機制一般指通過截獲整個網絡的所有信息流,根據信息源主機, 目標主機,服務協(xié)議端口等信息,簡單過濾掉不關心的數據,

4、再將用戶感興趣的 數據發(fā)送給更高層的應用程序進行分析。一般數據包的傳輸路徑依次為網卡、設 備驅動層、數據鏈路層、IP層、傳輸層、最后到達應用程序。IP數據包的捕 獲就是將經過數據鏈路層的以太網幀拷貝出一個備份,傳送給IP數據包捕獲程序進行相關的處理。IP數據包的捕獲程序一般由數據包捕獲函數庫和數據包分析器組成。數據包捕 獲函數庫是一個獨立于操作系統(tǒng)的標準捕獲函數庫。主要提供一組可用于查找網 絡接口名稱、打開選定的網絡接口、初始化、設置包過濾條件、編譯過濾代碼、 捕獲數據包等功能函數。對捕獲程序而言,只需要調用數據包捕獲函數庫的這些 函數就能獲得所期望的IP數據包。這種捕獲程序與數據包捕獲函數庫

5、分離的機 制,使得編寫的程序具有很好的可移植性。IP數據包捕獲程序的核心部分就是 數據包分析器。數據包分析器應具有識別和理解各種協(xié)議格式(IP、TCP、 UCR ICMP協(xié)議)和幀格式的能力,并對捕獲的數據進行分析和統(tǒng)計處理。編 寫數據包捕獲程序的主要工作就是如何實現(xiàn)數據包分析器的功能。3.3數據包捕獲與解析的程序設計首先對以太網幀頭進行結構體定義,總共有以下13項內容:Version、HeadLen ServiceType 、 TotalLen 、 Identifier、 Flags、 FragOffset 、 TimeToLive、。根據數據包的 Options、DestinAddr、So

6、urceAddr、HeadChecksum Protocol 捕獲機制,分別對以上13個內容編寫捕獲的C語言程序,進行一一捕獲,通 過開始的運行程序中運行編譯程序后所得到的.exe文件,就可以看到捕獲到的 信息。捕獲成功之后,最后將其各個信息進行解析,并寫到一個文件之中。以上 各個程序的編寫都是在 Visual Stdio C+ 6.0編譯器中完成。3.4網卡設置為了獲取網絡中的IP數據包,必須對網卡進行編程,在這里使用套接字進行編 程。但是,在通常情況下,網絡通信的套接字程序只能響應與自己硬件地址相匹 配的數據包或是以廣播形式發(fā)出的數據包。 對于其他形式的數據包,如已到達網 絡接口,但卻不是

7、發(fā)送到此地址的數據包,網絡接口在騅投遞地址并非自身地址 之后將不引起響應,也就是說應用程序無法收取與自己無關的數據包。 要想獲取 網絡設備的所有數據包,就需要將網卡設置為混雜模式。四、實驗結果及分析程序運行結果截圖:flrtWfWl 殲皿11 i LvriOlilMm b lm* rmjirih 單如(MBfuMcpAow rorawwTMni.1. r . i. it丄bi i1Rnnv 廬 nriSvqpmK-r huHnbvrjkhrraribcQwiil hkrtsrFwsl 0 f脅 9 FUr&ertiPQrtH曲 *1 opkiWtI附件:網絡數據包捕獲與解析的完整程序#in e

8、lude #in elude #in elude #in elude #in elude #in elude #pragma eomme nt(lib, ws2_32)#defi ne IO_RCVALL _WSAIOW(IOC_VENDOR, 1) using n amespace std;typedef struct IP_HEADunionun sig ned char Vers ion;un sig ned char HeadLe n;un sig ned char ServieeType;un sig ned short TotalLe n;unsigned short Identi

9、fieation;unionun sig ned short Flags;un sig ned short FragOffset;/Versio n(4)/Header Len gth(4)/Type of Servics(8)/Total Len gth(16)/Ide ntificatio n( 16)/IP Flags(3)/Fragme nt Offset(13)TTL(8)Protocol(8)un sig ned char TimeToLive; un sig ned char Protocol;/Header Checksum(16)/Source Address(32) /De

10、stination Address(32) /IP Optionsunsigned short HeadChecksum; unsigned int SourceAddr; unsigned int DestinAddr; unsigned char Options; ip_head;void main()WSADATA WSAData; if(WSAStartup(MAKEWORD(2,2), &WSAData) != 0) / 初始化 coutInit fails!h_addr_list0;bind(sock, (PSOCKADDR)&host_addr, sizeof(host_addr

11、); / 把 sockRaw 綁定到本地網卡上 DWORD dwBufferLen10;DWORD dwBufferInLen = 1;DWORD dwBytesReturned = 0;WSAIoctl(sock, IO_RCVALL, &dwBufferInLen, sizeof(dwBufferInLen),&dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned, NULL, NULL);/ 接受所有的數據 char buffer65535;ip_head ip;int packsum = 2;for(int i=0; i0)ip = *(

12、ip_head*)buffer;coutVersion:inet_ntoa(*(in_addr*)&ip.Version)endl; coutHeadLen:inet_ntoa(*(in_addr*)&ip.HeadLen)endl;coutServiceType: inet_ntoa(*(in_addr*)&ip.ServiceType)endl; coutTotalLen:inet_ntoa(*(in_addr*)&ip.TotalLen)endl; coutIdentification: inet_ntoa(*(in_addr*)&ip.Identification)endl; cout

13、Flags:inet_ntoa(*(in_addr*)&ip.Flags)endl;coutFragOffset: inet_ntoa(*(in_addr*)&ip.FragOffset)endl; coutTimeToLive: inet_ntoa(*(in_addr*)&ip.TimeToLive)endl; coutProtocol:inet_ntoa(*(in_addr*)&ip.Protocol)endl; coutHeadChecksum:inet_ntoa(*(in_addr*)&ip.HeadChecksum)endl; coutSourceAddr:inet_ntoa(*(i

14、n_addr*)&ip.SourceAddr)endl; coutDestinAddr:inet_ntoa(*(in_addr*)&ip.DestinAddr)endl; coutOptions:inet_ntoa(*(in_addr*)&ip.Options)endlendl;數據包的解析*/string str = inet_ntoa(*(in_addr*)&ip.SourceAddr); string ver = inet_ntoa(*(in_addr*)&ip.Version); string str1= inet_ntoa(*(in_addr*)&ip.HeadLen); strin

15、g str2= inet_ntoa(*(in_addr*)&ip.ServiceType); string str3 = inet_ntoa(*(in_addr*)&ip.TotalLen);string str4 = inet_ntoa(*(in_addr*)&ip.Identification); string str5 = inet_ntoa(*(in_addr*)&ip.Flags);string str6 = inet_ntoa(*(in_addr*)&ip.FragOffset);string str7 = inet_ntoa(*(in_addr*)&ip.TimeToLive);

16、 string str8 = inet_ntoa(*(in_addr*)&ip.Protocol);string str9 = inet_ntoa(*(in_addr*)&ip.HeadChecksum); string str10= inet_ntoa(*(in_addr*)&ip.SourceAddr); string str11 = inet_ntoa(*(in_addr*)&ip.DestinAddr);string str12 = inet_ntoa(*(in_addr*)&ip.Options); fstream outfile;outfile.open(d:aa.dat, ios

17、:out|ios:binary|ios:trunc);/ios:in|outfile.write(ver.c_str(), ver.length()+3);outfile.write(str1.c_str(), str1.length()+3);outfile.write(str2.c_str(), str2.length()+3);outfile.write(str3.c_str(), str3.length()+3);outfile.write(str4.c_str(), str4.length()+3);outfile.write(str6.c_str(), str6.length()+3);outfile.write(str7.c_str(), str7.length

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論