




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、廣州大學學生實驗報告開課學院及實驗室: 計算機學院 2015年月12日15日學院計算機科學與技術教育學院年級、專業(yè)、班姓名學號實驗課程名稱計算機網(wǎng)絡實驗成績實驗項目名稱實驗五:網(wǎng)絡程序設計指導老師一、實驗目的初步掌握網(wǎng)絡監(jiān)聽與分析技術的實現(xiàn)方法,從而加深對網(wǎng)絡協(xié)議的理解。了解以太網(wǎng)的幀格式,認識TCP/IP的層次結構。二、實驗環(huán)境1、安裝了TCP/IP協(xié)議的Windows系統(tǒng)的計算機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進行捕獲數(shù)據(jù)包,它工作在底層。以太網(wǎng)中傳輸?shù)臄?shù)據(jù)被稱為“幀”,幀的格式如下:長度(類型)幀前定界符前導碼幀校驗數(shù)據(jù)源地址目的地址 對于前導碼和幀前定界符通常有硬件處理,在分析數(shù)據(jù)包時不予考慮。當捕獲到一個以太網(wǎng)數(shù)據(jù)幀的時候,數(shù)據(jù)就開始從協(xié)議棧由底向上逐層解析,去掉各層所加上的報文協(xié)議頭部:1 / 9圖1:幀格式WinPcap是一個開源的、運行于Win32平臺的體系結構,是用于網(wǎng)絡封包抓取的一套工具,包括一個內核級別的packet filter,一個底層的DLL(packet.dll)和一個高級的獨立于系統(tǒng)的DLL(Wpcap.dll), packet.dll提供一個底層的API,可以直接訪
3、問網(wǎng)絡設備驅動,Wpcap.dll是一個強大的捕獲程序庫。它為win32應用程序提供訪問網(wǎng)絡底層的能力,Winpcap不能阻塞、過濾或控制其他應用程序數(shù)據(jù)報的發(fā)收,它僅僅只是監(jiān)聽共享網(wǎng)絡上傳送的數(shù)據(jù)包。本實驗利用WinPcap提供的函數(shù)來設置網(wǎng)卡模式并捕獲響應的數(shù)據(jù)包,進行解析。四、實驗內容及步驟步驟(1):安裝WinPcap驅動和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三個庫文件(三者之間用空格隔開),使工程在編譯連接的時候將WinPcap的響應的庫模塊加載進去。步驟(3):在Microsoft Visual C+6.0環(huán)境下設計界面,界面如下:圖3:界面設計View->ClassWizard定義控件變量。步驟(4):在CapturePacket1Dialog.h添加頭文件,把相應的庫文件添加到工程里。#include<winsock2.h>#inc
5、lude "pcap.h"#include "remote-ext.h"步驟(5):在OnInitDialog()中添加初始化界面的代碼。獲取控件的句柄,對窗口進行設計,如:對Listbox的初始化:/初始化Listbox:DWORD dwStyle;dwStyle = m_list.GetStyle();/列表類型dwStyle |= LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT |LVS_SHOWSELALWAYS ; /繪制表格 選擇整行m_list.SetExtendedStyle(dwStyle);/擴展類型 m
6、_list.InsertColumn(0,"時間");/插入一列: m_list.SetColumnWidth(0,80);/下面可以根據(jù)自己的需要插入列步驟(6):定義相關的結構體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頭部結構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)絡設備列表,調用函數(shù)原型如下int pcap_findalldevs_ex(char *source,struct pcap_rmthauth auth,pcap_if_t * *addevs,char * errbuf)alldevs參數(shù)指向獲取的網(wǎng)絡接口列表的第一個元素,網(wǎng)絡接口鏈表中每一個元素都是pcap_if_t結構,在p
10、cap.h中都已經(jīng)定義。本程序實現(xiàn)的具體代碼如下:在獲得了網(wǎng)絡設備列表后,下一步就要獲取網(wǎng)絡接口卡的IP地址、MAC地址、網(wǎng)絡掩碼、廣播地址。獲取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)絡適配器窗口步驟(8):雙擊“捕獲”按鈕,構造函數(shù),在此過程中要打開網(wǎng)絡接口,為了捕獲到網(wǎng)絡經(jīng)過某網(wǎng)絡接口設備的所有數(shù)據(jù)包,所以把網(wǎng)卡設置為混雜模式。調用函數(shù)pcap_open()(此函數(shù)可以在MSDN中查找此函數(shù)的具體使用方法)(僅供參考) pcap_if_t * d;pcap_t * adhandle;/* Open the device */ if ( (adhandle= pcap_open(d->name, / 設備名 65536, PCAP_OPENFLAG_PROMISC
12、UOUS, / 混雜模式 1000, / 超時時間 NULL;/在遠程設備中捕獲數(shù)據(jù)包時使用,在本實驗中不適用,設置為NULL errbuf / error buffer ) ) = NULL)打開網(wǎng)絡適配器后,下一步就是編輯和設置過濾器,可以根據(jù)自己的需要選擇性的捕獲網(wǎng)絡數(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 設置過濾器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)絡序轉化為主機序dport=nto
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美容美發(fā)行業(yè)普通合伙企業(yè)合伙人投資合作協(xié)議及技術支持
- 商混解除合同協(xié)議書
- 商店合作終止協(xié)議書
- 即時配送2025市場研究報告:配送路徑優(yōu)化與成本控制模式創(chuàng)新
- 雙方離婚搬家協(xié)議書
- 合伙投資房子協(xié)議書
- 品牌粉店加盟協(xié)議書
- 2025年學校餐廳承包合同書范本
- 叉車新車租賃協(xié)議書
- GB/T 1185-2006光學零件表面疵病
- 區(qū)域消防安全風險評估規(guī)程DB50-T 1114-2021
- 幼教培訓課件:《家園共育體系建構與實施策略》
- 最新易制毒化學品管理制度大全
- 安全輸血管理制度培訓課件
- 小學美術1色彩的情感課件
- 奧沙利鉑過敏反應
- 項目部臨時動火作業(yè)審批表
- 項目質量管理評價表
- 飲料生產(chǎn)公司應急預案匯編參考范本
- 藍色大氣商務商業(yè)計劃書PPT模板
評論
0/150
提交評論