




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、任務(wù)三 網(wǎng)絡(luò)編程一、實驗?zāi)康牟东@本機網(wǎng)卡的IP包,對捕獲的IP包進行解析。要求必須輸出以下字段:版本號、總長度、標志位、片偏移、協(xié)議、源地址和目的地址。二、實驗環(huán)境平臺:Windows編程環(huán)境:VC 6.0語言:C+三、實驗原理 3.1 數(shù)據(jù)報格式 以太幀由一個包含三個字段的幀頭開始,前兩個字段包含了物理地址,各六個字節(jié),頭部的第三個字段包含了 16 位的以太幀類型,幀頭后面是數(shù)據(jù)區(qū)。根據(jù)幀類型可以判斷是哪種數(shù)據(jù)包,一般常用的有 0X0080(IP 數(shù)據(jù)包)、 0X0806(ARP 請求應(yīng)答)和 0X8035(RARP 請求應(yīng)答)三種類型。TCPIP 協(xié)議簇中位于網(wǎng)絡(luò)層的協(xié)議,也是最為核心的協(xié)
2、議。所有的 TCP, UDP, ICMP及 IGMP 數(shù)據(jù)都以 IP 數(shù)據(jù)報格式傳輸。IP 協(xié)議提供了無連接的、不可靠的數(shù)據(jù)傳輸服務(wù)。同時IP 協(xié)議的一個重要功能是為網(wǎng)絡(luò)上的包傳遞提供路由支持。TCPIP 協(xié)議使用 IP 數(shù)據(jù)報這個名字來指代一個互聯(lián)網(wǎng)數(shù)據(jù)包。IP 數(shù)據(jù)報由兩部分組成,前面的頭部和后面的數(shù)據(jù)區(qū),頭部含有描述該數(shù)據(jù)報的信息,包括源 IP 地址和目的 IP 地址等。在 IP 數(shù)據(jù)報的報頭中的眾多信息可根據(jù)協(xié)議類型字段區(qū)分出該數(shù)據(jù)包的類型,常用的有TCP 包、 UDP 包、 ICMP 包等,各格式分別如下所示:IP數(shù)據(jù)報格式TCP數(shù)據(jù)報格式ICMP數(shù)據(jù)報格式UDP數(shù)據(jù)報格式3.2 捕
3、獲數(shù)據(jù)包方法目前常用的捕獲數(shù)據(jù)包的方法有原始套接字、LibPcap、WinPcap和JPcap等方法。本次實驗選用套接字方法。套接字是網(wǎng)絡(luò)應(yīng)用編程接口。應(yīng)用程序可以使用它進行網(wǎng)絡(luò)通信而不需要知道底層發(fā)生的細節(jié)。有時需要自己生成一些定制的數(shù)據(jù)包或者功能并希望繞開Socket提供的功能,原始套接字(RawSocket)滿足了這樣的要求。原始套接字能夠生成自己的數(shù)據(jù)報文,包括報頭和數(shù)據(jù)報本身的內(nèi)容。通過原始套接字,可以更加自如地控制Windows下的多種協(xié)議,而且能夠?qū)W(wǎng)絡(luò)底層的傳輸機制進行控制。網(wǎng)絡(luò)數(shù)據(jù)包截獲機制一般指通過截獲整個網(wǎng)絡(luò)的所有信息流,根據(jù)信息源主機,目標主機,服務(wù)協(xié)議端口等信息,簡單
4、過濾掉不關(guān)心的數(shù)據(jù),再將用戶感興趣的數(shù)據(jù)發(fā)送給更高層的應(yīng)用程序進行分析。一般數(shù)據(jù)包的傳輸路徑依次為網(wǎng)卡、設(shè)備驅(qū)動層、數(shù)據(jù)鏈路層、 IP 層、傳輸層、最后到達應(yīng)用程序。IP 數(shù)據(jù)包的捕獲就是將經(jīng)過數(shù)據(jù)鏈路層的以太網(wǎng)幀拷貝出一個備份,傳送給 IP 數(shù)據(jù)包捕獲程序進行相關(guān)的處理。IP 數(shù)據(jù)包的捕獲程序一般由數(shù)據(jù)包捕獲函數(shù)庫和數(shù)據(jù)包分析器組成。數(shù)據(jù)包捕獲函數(shù)庫是一個獨立于操作系統(tǒng)的標準捕獲函數(shù)庫。主要提供一組可用于查找網(wǎng)絡(luò)接口名稱、打開選定的網(wǎng)絡(luò)接口、初始化、設(shè)置包過濾條件、編譯過濾代碼、捕獲數(shù)據(jù)包等功能函數(shù)。對捕獲程序而言,只需要調(diào)用數(shù)據(jù)包捕獲函數(shù)庫的這些函數(shù)就能獲得所期望的 IP 數(shù)據(jù)包。這種捕獲
5、程序與數(shù)據(jù)包捕獲函數(shù)庫分離的機制,使得編寫的程序具有很好的可移植性。IP 數(shù)據(jù)包捕獲程序的核心部分就是數(shù)據(jù)包分析器。數(shù)據(jù)包分析器應(yīng)具有識別和理解各種協(xié)議格式(IP、 TCP、 UCP、 ICMP 協(xié)議)和幀格式的能力,并對捕獲的數(shù)據(jù)進行分析和統(tǒng)計處理。編寫數(shù)據(jù)包捕獲程序的主要工作就是如何實現(xiàn)數(shù)據(jù)包分析器的功能。3.3 數(shù)據(jù)包捕獲與解析的程序設(shè)計首先對以太網(wǎng)幀頭進行結(jié)構(gòu)體定義,總共有以下 13 項內(nèi)容:Version、HeadLen、ServiceType、 TotalLen、Identifier、Flags、FragOffset、TimeToLive、Protocol、HeadChecksum
6、、SourceAddr、DestinAddr、Options。根據(jù)數(shù)據(jù)包的捕獲機制,分別對以上 13 個內(nèi)容編寫捕獲的 C 語言程序,進行一一捕獲,通過開始的運行程序中運行編譯程序后所得到的.exe 文件,就可以看到捕獲到的信息。捕獲成功之后,最后將其各個信息進行解析,并寫到一個文件之中。以上各個程序的編寫都是在 Visual Stdio C+ 6.0 編譯器中完成。3.4 網(wǎng)卡設(shè)置為了獲取網(wǎng)絡(luò)中的IP數(shù)據(jù)包,必須對網(wǎng)卡進行編程,在這里使用套接字進行編程。但是,在通常情況下,網(wǎng)絡(luò)通信的套接字程序只能響應(yīng)與自己硬件地址相匹配的數(shù)據(jù)包或是以廣播形式發(fā)出的數(shù)據(jù)包。對于其他形式的數(shù)據(jù)包,如已到達網(wǎng)絡(luò)接
7、口,但卻不是發(fā)送到此地址的數(shù)據(jù)包,網(wǎng)絡(luò)接口在騅投遞地址并非自身地址之后將不引起響應(yīng),也就是說應(yīng)用程序無法收取與自己無關(guān)的數(shù)據(jù)包。要想獲取網(wǎng)絡(luò)設(shè)備的所有數(shù)據(jù)包,就需要將網(wǎng)卡設(shè)置為混雜模式。四、實驗結(jié)果及分析程序運行結(jié)果截圖:附件:網(wǎng)絡(luò)數(shù)據(jù)包捕獲與解析的完整程序#include <iostream>#include <winsock2.h>#include <ws2tcpip.h>#include <cstdlib>#include <fstream>#include <string>#pragma comment(lib,
8、"ws2_32")#define IO_RCVALL _WSAIOW(IOC_VENDOR, 1)using namespace std;typedef struct IP_HEAD unionunsigned char Version; /Version(4)unsigned char HeadLen; /Header Length(4);unsigned char ServiceType; /Type of Servics(8)unsigned short TotalLen; /Total Length(16)unsigned short Identification;
9、 /Identification(16)union unsigned short Flags; /IP Flags(3)unsigned short FragOffset; /Fragment Offset(13);unsigned char TimeToLive; /TTL(8)unsigned char Protocol; /Protocol(8)unsigned short HeadChecksum; /Header Checksum(16)unsigned int SourceAddr; /Source Address(32)unsigned int DestinAddr; /Dest
10、ination Address(32)unsigned char Options; /IP Options ip_head;void main()WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2), &WSAData) != 0) /初始化cout<<"Init fails!"<<endl;return;/*數(shù)據(jù)包的捕獲*/SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP); /抓捕IP數(shù)據(jù)報bool flag = true;setsockopt(sock
11、, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag); /設(shè)置IP頭操作選項char hostName128;gethostname(hostName, 100);hostent* pHostIp = gethostbyname(hostName);sockaddr_in host_addr;host_addr.sin_family = AF_INET;host_addr.sin_port = htons(6000);host_addr.sin_addr = *(in_addr*)pHostIp->h_addr_list0;bi
12、nd(sock, (PSOCKADDR)&host_addr, sizeof(host_addr); /把sockRaw綁定到本地網(wǎng)卡上DWORD dwBufferLen10;DWORD dwBufferInLen = 1;DWORD dwBytesReturned = 0;WSAIoctl(sock, IO_RCVALL, &dwBufferInLen, sizeof(dwBufferInLen),&dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned, NULL, NULL);/接受所有的數(shù)據(jù)char buff
13、er65535;ip_head ip;int packsum = 2;for(int i=0; i<packsum; i+)if(recv(sock, buffer, 65535, 0)>0) ip = *(ip_head*)buffer;cout<<"Version:"<<inet_ntoa(*(in_addr*)&ip.Version)<<endl;cout<<"HeadLen:"<<inet_ntoa(*(in_addr*)&ip.HeadLen)<<
14、;endl;cout<<"ServiceType: "<<inet_ntoa(*(in_addr*)&ip.ServiceType)<<endl;cout<<"TotalLen:"<<inet_ntoa(*(in_addr*)&ip.TotalLen)<<endl;cout<<"Identification: "<<inet_ntoa(*(in_addr*)&ip.Identification)<<end
15、l;cout<<"Flags:"<<inet_ntoa(*(in_addr*)&ip.Flags)<<endl;cout<<"FragOffset: "<<inet_ntoa(*(in_addr*)&ip.FragOffset)<<endl;cout<<"TimeToLive: "<<inet_ntoa(*(in_addr*)&ip.TimeToLive)<<endl;cout<<"
16、Protocol:"<<inet_ntoa(*(in_addr*)&ip.Protocol)<<endl;cout<<"HeadChecksum:"<<inet_ntoa(*(in_addr*)&ip.HeadChecksum)<<endl;cout<<"SourceAddr:"<<inet_ntoa(*(in_addr*)&ip.SourceAddr)<<endl;cout<<"DestinAddr:&
17、quot;<<inet_ntoa(*(in_addr*)&ip.DestinAddr)<<endl;cout<<"Options:"<<inet_ntoa(*(in_addr*)&ip.Options)<<endl<<endl;/*數(shù)據(jù)包的解析*/string str = inet_ntoa(*(in_addr*)&ip.SourceAddr);string ver = inet_ntoa(*(in_addr*)&ip.Version);string str1= inet
18、_ntoa(*(in_addr*)&ip.HeadLen);string 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.FragOf
19、fset);string str7 = inet_ntoa(*(in_addr*)&ip.TimeToLive);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("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 乳制品企業(yè)產(chǎn)品盈利能力分析研究
- DB11/T 1009-2013 供熱系統(tǒng)節(jié)能改造技術(shù)規(guī)程
- 天津市水務(wù)事業(yè)項目融資的前景研究
- 儲值卡采購合同范例
- 2025年地毯、掛毯類工藝品項目合作計劃書
- 企業(yè)投資個人合同范例
- 二手居民住宅購房合同范例
- pvc塑膠地板合同范例
- 人工草皮轉(zhuǎn)讓合同范例
- 信息投資合同范例
- 《豎提》課件
- 中國藥膳理論與實踐-藥膳基本理論和技能
- 華東師大版七年級初一數(shù)學(xué)下冊全套試卷(單元、期中、期末)
- 南非醉茄產(chǎn)業(yè)發(fā)展規(guī)劃(十四五)
- 復(fù)古簡約中國古典名著導(dǎo)讀三國演義培訓(xùn)PPT模板
- 不銹鋼排煙風(fēng)管施工實施方案
- PMC部門工作流程圖
- IPC-4101剛性多層印制線路板的基材規(guī)范
- Oracle-EBS模塊講解
- 漿砌條石磚項施工方案
- 帶你領(lǐng)略淵海子平
評論
0/150
提交評論