計算機(jī)網(wǎng)絡(luò)實驗-參考模板_第1頁
計算機(jī)網(wǎng)絡(luò)實驗-參考模板_第2頁
計算機(jī)網(wǎng)絡(luò)實驗-參考模板_第3頁
計算機(jī)網(wǎng)絡(luò)實驗-參考模板_第4頁
計算機(jī)網(wǎng)絡(luò)實驗-參考模板_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、廣州大學(xué)學(xué)生實驗報告開課學(xué)院及實驗室: 計算機(jī)學(xué)院 2015年月12日15日學(xué)院計算機(jī)科學(xué)與技術(shù)教育學(xué)院年級、專業(yè)、班姓名學(xué)號實驗課程名稱計算機(jī)網(wǎng)絡(luò)實驗成績實驗項目名稱實驗五:網(wǎng)絡(luò)程序設(shè)計指導(dǎo)老師一、實驗?zāi)康某醪秸莆站W(wǎng)絡(luò)監(jiān)聽與分析技術(shù)的實現(xiàn)方法,從而加深對網(wǎng)絡(luò)協(xié)議的理解。了解以太網(wǎng)的幀格式,認(rèn)識TCP/IP的層次結(jié)構(gòu)。二、實驗環(huán)境1、安裝了TCP/IP協(xié)議的Windows系統(tǒng)的計算機(jī)2、VC+6.0開發(fā)環(huán)境三、實驗原理在分層模型中,主要利用數(shù)據(jù)封裝來實現(xiàn)不同系統(tǒng)間的通信,在發(fā)送數(shù)據(jù)經(jīng)過時,每經(jīng)過一層就會被增加上本層的頭部信息。本實驗要分析數(shù)據(jù)包,就一層一層的分析這些頭部信息。本實驗用WinPc

2、ap進(jìn)行捕獲數(shù)據(jù)包,它工作在底層。以太網(wǎng)中傳輸?shù)臄?shù)據(jù)被稱為“幀”,幀的格式如下:長度(類型)幀前定界符前導(dǎo)碼幀校驗數(shù)據(jù)源地址目的地址 對于前導(dǎo)碼和幀前定界符通常有硬件處理,在分析數(shù)據(jù)包時不予考慮。當(dāng)捕獲到一個以太網(wǎng)數(shù)據(jù)幀的時候,數(shù)據(jù)就開始從協(xié)議棧由底向上逐層解析,去掉各層所加上的報文協(xié)議頭部:1 / 9圖1:幀格式WinPcap是一個開源的、運(yùn)行于Win32平臺的體系結(jié)構(gòu),是用于網(wǎng)絡(luò)封包抓取的一套工具,包括一個內(nèi)核級別的packet filter,一個底層的DLL(packet.dll)和一個高級的獨(dú)立于系統(tǒng)的DLL(Wpcap.dll), packet.dll提供一個底層的API,可以直接訪

3、問網(wǎng)絡(luò)設(shè)備驅(qū)動,Wpcap.dll是一個強(qiáng)大的捕獲程序庫。它為win32應(yīng)用程序提供訪問網(wǎng)絡(luò)底層的能力,Winpcap不能阻塞、過濾或控制其他應(yīng)用程序數(shù)據(jù)報的發(fā)收,它僅僅只是監(jiān)聽共享網(wǎng)絡(luò)上傳送的數(shù)據(jù)包。本實驗利用WinPcap提供的函數(shù)來設(shè)置網(wǎng)卡模式并捕獲響應(yīng)的數(shù)據(jù)包,進(jìn)行解析。四、實驗內(nèi)容及步驟步驟(1):安裝WinPcap驅(qū)動和DLL程序。在VC+中配置WinPcap,Tools->options->Directories,添加WinPcap的Include和Lib文件。如下:圖2:添加WinPcap庫步驟(2):新建MFCAppwizard(exe)工程,在打開的工程下,選擇

4、Project->Settings的C/C+選項卡,選擇Link選項卡,在Object/library modules中添加wpcap.lib 、ws2_32.lib和packet.lib三個庫文件(三者之間用空格隔開),使工程在編譯連接的時候?qū)inPcap的響應(yīng)的庫模塊加載進(jìn)去。步驟(3):在Microsoft Visual C+6.0環(huán)境下設(shè)計界面,界面如下:圖3:界面設(shè)計View->ClassWizard定義控件變量。步驟(4):在CapturePacket1Dialog.h添加頭文件,把相應(yīng)的庫文件添加到工程里。#include<winsock2.h>#inc

5、lude "pcap.h"#include "remote-ext.h"步驟(5):在OnInitDialog()中添加初始化界面的代碼。獲取控件的句柄,對窗口進(jìn)行設(shè)計,如:對Listbox的初始化:/初始化Listbox:DWORD dwStyle;dwStyle = m_list.GetStyle();/列表類型dwStyle |= LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT |LVS_SHOWSELALWAYS ; /繪制表格 選擇整行m_list.SetExtendedStyle(dwStyle);/擴(kuò)展類型 m

6、_list.InsertColumn(0,"時間");/插入一列: m_list.SetColumnWidth(0,80);/下面可以根據(jù)自己的需要插入列步驟(6):定義相關(guān)的結(jié)構(gòu)體typedef struct ip_addressu_char byte1;u_char byte2;u_char byte3;u_char byte4;ip_address;/* IPv4 header */typedef struct ip_headeru_char ver_ihl; / Version (4 bits) + Internet header length (4 bits)u_

7、char tos; / Type of service u_short tlen; / Total length u_short identification; / Identificationu_short flags_fo; / Flags (3 bits) + Fragment offset (13 bits)u_char ttl; / Time to liveu_char proto; / Protocolu_short crc; / Header checksumip_address saddr; / Source addressip_address daddr; / Destina

8、tion addressu_int op_pad; / Option + Paddingip_header;typedef struct udp_headeru_short sport; / Source portu_short dport; / Destination portu_short len; / Datagram lengthu_short crc; / Checksumudp_header;/mac頭部結(jié)構(gòu)typedef struct BYTE DesMacAddr6;BYTE SrcMacAddr6;WORD LengthOrType;/數(shù)據(jù)長度或類型MAC_HEADER;/M

9、AC幀類型定義const u_short MAC_TYPE_IP=0x0800;const u_short MAC_TYPE_ARP=0x0806;const u_short MAC_TYPE_RARP=0x08035;步驟(7):在OnInitDialog()獲取網(wǎng)絡(luò)設(shè)備列表,調(diào)用函數(shù)原型如下int pcap_findalldevs_ex(char *source,struct pcap_rmthauth auth,pcap_if_t * *addevs,char * errbuf)alldevs參數(shù)指向獲取的網(wǎng)絡(luò)接口列表的第一個元素,網(wǎng)絡(luò)接口鏈表中每一個元素都是pcap_if_t結(jié)構(gòu),在p

10、cap.h中都已經(jīng)定義。本程序?qū)崿F(xiàn)的具體代碼如下:在獲得了網(wǎng)絡(luò)設(shè)備列表后,下一步就要獲取網(wǎng)絡(luò)接口卡的IP地址、MAC地址、網(wǎng)絡(luò)掩碼、廣播地址。獲取Ip地址的具體實現(xiàn)代碼如下(僅供參考):for( i = 0; pHost!= NULL && pHost->h_addr_listi!= NULL; i+ ) char str100; char addr20;LPCSTR psz=inet_ntoa (*(struct in_addr *)pHost->h_addr_listi);str3="IP地址是:"str3=str3+psz;m_list3.

11、InsertItem(m_list3.GetItemCount(),str3);/加入列表項圖4:獲取網(wǎng)絡(luò)適配器窗口步驟(8):雙擊“捕獲”按鈕,構(gòu)造函數(shù),在此過程中要打開網(wǎng)絡(luò)接口,為了捕獲到網(wǎng)絡(luò)經(jīng)過某網(wǎng)絡(luò)接口設(shè)備的所有數(shù)據(jù)包,所以把網(wǎng)卡設(shè)置為混雜模式。調(diào)用函數(shù)pcap_open()(此函數(shù)可以在MSDN中查找此函數(shù)的具體使用方法)(僅供參考) pcap_if_t * d;pcap_t * adhandle;/* Open the device */ if ( (adhandle= pcap_open(d->name, / 設(shè)備名 65536, PCAP_OPENFLAG_PROMISC

12、UOUS, / 混雜模式 1000, / 超時時間 NULL;/在遠(yuǎn)程設(shè)備中捕獲數(shù)據(jù)包時使用,在本實驗中不適用,設(shè)置為NULL errbuf / error buffer ) ) = NULL)打開網(wǎng)絡(luò)適配器后,下一步就是編輯和設(shè)置過濾器,可以根據(jù)自己的需要選擇性的捕獲網(wǎng)絡(luò)數(shù)據(jù)包。本實驗選擇IP協(xié)議,定義char packet_filter=”ip”;if(pcap_compile(adhandle, &fcode, packet_filter, 1, netmask)<0) /add your code pcap_freealldevs(alldevs);/set the fi

13、lter 設(shè)置過濾器if(pcap_setfilter(adhandle, &fcode)<0) add your code;pcap_freealldevs(alldevs);步驟(9):前期工作做完,就開始獲取數(shù)據(jù)包,在本實驗中通過創(chuàng)建線程來實現(xiàn)抓包的過程,實現(xiàn)代碼(僅供參考):/* start the capture 抓包線程*/DWORD nThreadId=0; handle=(HANDLE):CreateThread(NULL,0,mythread,(LPVOID)this,CREATE_SUSPENDED,&nThreadId );SetThreadPrio

14、rity(handle,THREAD_PRIORITY_NORMAL);ResumeThread(handle);其中mythread為在CapturePacket1Dlg.cpp自定義的線程名稱DWORD WINAPI mythread(LPVOID lParam)CWinpcapdialogDlg *p=(CWinpcapdialogDlg*)lParam;time_t local_tv_sec;struct tm *ltime;char timestr16;ip_header *ih;udp_header *uh;u_int ip_len;步驟(10):在mythread()中分析捕獲的

15、數(shù)據(jù)包,實現(xiàn)代碼(僅供參考,有省略):while(res=pcap_next_ex(p->adhandle,&p->header,&p->pkt_data)>=0) if(res=0)continue;else/處理捕獲的包local_tv_sec = p->header->ts.tv_sec;ltime=localtime(&local_tv_sec);strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); /獲取時間ih = (ip_header *) (p->pkt_data +14); /ih指向IP報文的首部ip_len = (ih->ver_ihl & 0xf) * 4; uh = (udp_header *) (u_char*)ih + ip_len); / uh指向UDP報文的首部sport=ntohs(uh->sport); /網(wǎng)絡(luò)序轉(zhuǎn)化為主機(jī)序dport=nto

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論