解析ARP數(shù)據(jù)包-計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_第1頁(yè)
解析ARP數(shù)據(jù)包-計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_第2頁(yè)
解析ARP數(shù)據(jù)包-計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_第3頁(yè)
解析ARP數(shù)據(jù)包-計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_第4頁(yè)
解析ARP數(shù)據(jù)包-計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告題 目: 解析ARP數(shù)據(jù)包 姓 名: 學(xué) 號(hào): 同組姓名: 專業(yè)班級(jí): 指導(dǎo)教師: 評(píng)閱意見(jiàn):評(píng)定成績(jī): 指導(dǎo)老師簽名:年 月 日 目 錄一、課程設(shè)計(jì)目的:2二、課程設(shè)計(jì)要求:2三、課程設(shè)計(jì)分析31課程設(shè)計(jì)中的重點(diǎn)及難點(diǎn)32.參考算法33.核心代碼4四、源程序及運(yùn)行截圖5五、心得體會(huì)9六、參考文獻(xiàn)10一、課程設(shè)計(jì)目的:本課程設(shè)計(jì)的目的是對(duì)網(wǎng)絡(luò)上的ARP數(shù)據(jù)包進(jìn)行解析,從而熟悉ARP數(shù)據(jù)包的結(jié)構(gòu),對(duì)ARP協(xié)議有更好的理解和認(rèn)識(shí)。二、課程設(shè)計(jì)要求:通過(guò)編制程序,獲取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。程

2、序的具體要求如下所示:1以命令行的形式運(yùn)行,如下所示:arpparse logfile其中,arpparse為程序名;logfile為日志文件名。2程序輸出內(nèi)容如下所示:源IP地址 源MAC地址 目的IP地址 操作時(shí)間各部分的說(shuō)明如下所示:l 源IP地址:輸出ARP消息格式中的源IP地址字段。l 源MAC地址:輸出ARP消息格式中的源物理地址字段。l 目的IP地址:輸出ARP消息格式中的目的IP地址字段。l 目的MAC地址:輸出ARP消息格式中的目的物理地址字段。l 操作:輸出ARP消息格式中的操作字段,若為ARP請(qǐng)求,則為1,若為ARP應(yīng)答,則為2。l 時(shí)間:該ARP包產(chǎn)生的時(shí)間3.當(dāng)程序接

3、收到鍵盤輸入Ctrl+C時(shí)退出。三、課程設(shè)計(jì)分析1課程設(shè)計(jì)中的重點(diǎn)及難點(diǎn)1) 程序中會(huì)用到Winpcap,Winpcap是Win32環(huán)境下數(shù)據(jù)包捕獲的開(kāi)放代碼函數(shù)庫(kù)?;赪inpcap的應(yīng)用程序一般按照下面幾個(gè)步驟進(jìn)行設(shè)計(jì):l 輸出網(wǎng)卡設(shè)備列表。l 選擇網(wǎng)卡并打開(kāi)。l 捕獲數(shù)據(jù)包時(shí),可能需要設(shè)置過(guò)濾器。l 捕獲數(shù)據(jù)包或者發(fā)送數(shù)據(jù)包。2) 在程序設(shè)計(jì)過(guò)程中需要注意網(wǎng)絡(luò)主機(jī)字節(jié)順序的轉(zhuǎn)化。由于不同的計(jì)算機(jī)系統(tǒng)所采用的數(shù)據(jù)表示方式不同,對(duì)于2B或4B的數(shù)據(jù),有的采用低字節(jié)地址存放數(shù)據(jù)的高權(quán)值位,而有的卻以低地址字節(jié)存放數(shù)據(jù)低權(quán)位值,在網(wǎng)絡(luò)的數(shù)據(jù)傳輸中,我們應(yīng)該統(tǒng)一表示,所以我們?cè)诓东@數(shù)據(jù)包后,應(yīng)將數(shù)

4、據(jù)包頭部的表示長(zhǎng)度或類型的數(shù)據(jù)轉(zhuǎn)換成本地機(jī)的表達(dá)形式??梢岳煤瘮?shù)ntohs()將網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換為主機(jī)字節(jié)序。3) 選擇網(wǎng)卡并打開(kāi)時(shí),注意選擇可用的網(wǎng)卡。2.參考算法1) 取得當(dāng)前網(wǎng)卡設(shè)備列表。2) 選擇Ethernet網(wǎng)卡并打開(kāi),注意判斷所選網(wǎng)卡是否為實(shí)際存在的可用網(wǎng)卡。3) 設(shè)置過(guò)濾器,此處的過(guò)濾器正則表達(dá)式為“arp”或者“ether protoarp”。4) 捕獲數(shù)據(jù)包并進(jìn)行處理(包括輸出各IP地址,物理地址,操作類型以及時(shí)間)。由于要記錄日志文件,為了便于輸出流參數(shù),建議采用pcap_next_ex()函數(shù)。流程圖如下圖所示:開(kāi)始獲取網(wǎng)卡列表選取Ethernet網(wǎng)卡打開(kāi)網(wǎng)卡(混雜模式

5、)編譯設(shè)置過(guò)濾器捕獲ARP包并將其相應(yīng)內(nèi)容輸出3.核心代碼l ARP數(shù)據(jù)包結(jié)構(gòu)struct arppkt unsigned short hdtyp; /硬件類型。值0001表示其為Ethernetunsigned short protyp; /協(xié)議類型。值0800表示上層協(xié)議為IPunsigned char hdsize; /硬件地址長(zhǎng)度。值為06unsigned char prosize; /協(xié)議地址長(zhǎng)度。值為04unsigned short op; /操作值為0001/0002,分別表示ARP請(qǐng)求/應(yīng)答u_char smac6; /源MAC地址,6Bu_char sip4; /源IP地址,

6、4Bu_char dmac6; /目的MAC地址u_char dip4; /目的IP地址;l 獲取網(wǎng)絡(luò)設(shè)備列表,并以混雜模式打開(kāi)網(wǎng)絡(luò)設(shè)備/獲取網(wǎng)絡(luò)設(shè)備列表if(pcap_findalldevs(&alldevs,errbuf)=-1)cout<<"Error in pcap_findalldevs:"<<errbuf;return;/選擇Ethernet卡for(d=alldevs;d;d=d->next) /以混雜模式打開(kāi)網(wǎng)卡,以接受所有的幀if(adhandle=pcap_open_live(d->name,1000,1,30

7、0,errbuf)=NULL)cout<<"nUnable to open the adapter."pcap_freealldevs(alldevs); /釋放設(shè)備列表return;if(pcap_datalink(adhandle)=DLT_EN10MB&&d->addresses!=NULL)break;l 編譯過(guò)濾器并設(shè)置過(guò)濾器,只捕獲ARP數(shù)據(jù)包c(diǎn)har packet_filter=”ether proto arp”; /過(guò)濾,選擇arp協(xié)議if(pcap_compile(adhandle,&fcode,packet_fi

8、lter,1,netmask)<0) cout<<"nUnable to compile the packet filter.Check the syntax.n" pcap_freealldevs(alldevs); return;/設(shè)置過(guò)濾器if(pcap_setfilter(adhandle,&fcode)<0) cout<<"nError setting the filter.n" pcap_freealldevs(alldevs); return;l 循環(huán)捕獲ARP包,并進(jìn)行解析while(resul

9、t=pcap_next_ex(adhandle,&header,&pkt_data)>=0) 輸出ARP數(shù)據(jù)包的各個(gè)域的內(nèi)容到文件和屏幕上 四、源程序及運(yùn)行截圖1.源程序如下:#include<winsock2.h>#pragma comment(lib,"Ws2_32.lib") /用到ntobs()/等同于點(diǎn)擊"project-setting-link"打開(kāi)object/library module編輯框后加入文件#pragma comment(lib,"wpcap.lib")#include &

10、quot;pcap.h" /此頭文件沒(méi)有包含在VC中,需要另外加入#include<fstream.h>#include<iomanip.h> /格式化輸出需要用到#include<conio.h> /用到_getch()/注意到接收的數(shù)據(jù)包頭中代表類型,數(shù)據(jù)長(zhǎng)度的字段采用的是big-endian/所以對(duì)于2B/4B的數(shù)據(jù)要用ntohs()轉(zhuǎn)換為本機(jī)形式/ARP包結(jié)構(gòu)struct arppkt unsigned short hdtyp; /硬件類型。值0001表示其為Ethernetunsigned short protyp; /協(xié)議類型。值080

11、0表示上層協(xié)議為IPunsigned char hdsize; /硬件地址長(zhǎng)度。值為06unsigned char prosize; /協(xié)議地址長(zhǎng)度。值為04unsigned short op; /操作值為0001/0002,分別表示ARP請(qǐng)求/應(yīng)答u_char smac6; /源MAC地址,6Bu_char sip4; /源IP地址,4Bu_char dmac6; /目的MAC地址u_char dip4; /目的IP地址;void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out)

12、;void main(int argc,char *argv )if(argc!=2)cout<<"Usage:arpparse logfilename"<<endl;cout<<"press any key to continue."<<endl;_getch();return;pcap_if_t *alldevs;pcap_if_t *d;pcap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;u_int netmask;char packet_filter="

13、;ether proto arp"struct bpf_program fcode;struct pcap_pkthdr *header;const u_char *pkt_data;if(pcap_findalldevs(&alldevs,errbuf)=-1)cout<<"Error in pcap_findalldevs:"<<errbuf;return;for(d=alldevs;d;d=d->next) if(adhandle=pcap_open_live(d->name,1000,1,300,errbuf)=

14、NULL)cout<<"nUnable to open the adapter."pcap_freealldevs(alldevs);return;if(pcap_datalink(adhandle)=DLT_EN10MB&&d->addressess!=NULL)break;if(d=NULL)cout<<"nNo interfaces found! Make sure Winpcap is installed.n"return;/獲得子網(wǎng)掩碼netmask=(sockaddr_in *)(d->ne

15、tmask)->sin_addr.s_un.s_addr;/編譯過(guò)濾器,只捕獲ARP包if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0) cout<<"nUnable to compile the packet filter.Check the syntax.n" pcap_freealldevs(alldevs); return;/設(shè)置過(guò)濾器if(pcap_setfilter(ashandle,&fcode)<0) cout<<"nErr

16、or setting the filter.n" pcap_freealldevs(alldevs); return;cout<<"ttlistening on "<<d->description<<"."<<endl<<endl;/顯示提示信息及每項(xiàng)含義ofstream fout(argv1,ios:app); /日志記錄文件/為了查看日志時(shí)的方便,其中加入了日期記錄time_t t;time(&t);fout.seekp(0,ios:end);if(fout.tell

17、p()!=0)fout<<endl;fout<<"ttARP request(1)/reply(2) on"<<ctime(&t);cout<<Sour Ip Addr"<<" "<<"Sour MAC Address"<<" "<<"Des Ip Addr"<<" "<<"Des MAC Address"<<

18、;" "<<"OP"<<" "<<"Time"<<endl;fout<<Sour Ip Addr"<<" "<<"Sour MAC Address"<<" "<<"Des Ip Addr"<<" "<<"Des MAC Address"<<&qu

19、ot; "<<"OP"<<" "<<"Time"<<endl;/釋放設(shè)備列表pcap_freealldevs(alldevs);int result;while(result=pcap_next_ex(adhandle,&header,&pkt_data)>=0) if(result=0)continue;packer_handler(header,pkt_data,cout);packet_handler(header,pkt_data,fout);vo

20、id packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out) arpkt* arph = (arppkt *)(pkt_data +14); for(int i=0;i<3;i+) out<<int(arph->sipi)<<'.' out.setf(ios:left); out<<setw(3)<<int(arph->sip3)<<" " out.unsetf(ios:up

21、percase); for(i=0;i<5;i+) out<<hex<<setw(2)<<int(arph->smaci)<<'-' out<<hex<<setw(2)<<int(arph->smac5)<<" " out.fill(oldfillchar); out.unsetf(ios:hex|ios:uppercase); for(i=0;i<3;i+) out<<int(arph->dip3)<<

22、9;.'out.unsetf(ios:left);/輸出目的MAC地址out.fill('0');out.setf(ios:uppercase);for(i=0;i<5;i+)out<<hex<<setw(2)<<int(arph->dmaci)<<'-'out.fill(oldfillchar);out.unsetf(ios:hex|ios:uppercase);out<<ntohs(arph->op)<<" "struct tm *ltime;ltime=localtime(&header->ts.tv_sec);out.fill('0');out<<ltime->tm_hour<<':'<<setw(2)<<ltime->

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論