版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告題 目: 解析ARP數(shù)據(jù)包 姓 名: 學(xué) 號: 同組姓名: 專業(yè)班級: 指導(dǎo)教師: 評閱意見:評定成績: 指導(dǎo)老師簽名:年 月 日 目 錄一、課程設(shè)計目的:2二、課程設(shè)計要求:2三、課程設(shè)計分析31課程設(shè)計中的重點(diǎn)及難點(diǎn)32.參考算法33.核心代碼4四、源程序及運(yùn)行截圖5五、心得體會9六、參考文獻(xiàn)10一、課程設(shè)計目的:本課程設(shè)計的目的是對網(wǎng)絡(luò)上的ARP數(shù)據(jù)包進(jìn)行解析,從而熟悉ARP數(shù)據(jù)包的結(jié)構(gòu),對ARP協(xié)議有更好的理解和認(rèn)識。二、課程設(shè)計要求:通過編制程序,獲取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時寫入日志文件。程
2、序的具體要求如下所示:1以命令行的形式運(yùn)行,如下所示:arpparse logfile其中,arpparse為程序名;logfile為日志文件名。2程序輸出內(nèi)容如下所示:源IP地址 源MAC地址 目的IP地址 操作時間各部分的說明如下所示:l 源IP地址:輸出ARP消息格式中的源IP地址字段。l 源MAC地址:輸出ARP消息格式中的源物理地址字段。l 目的IP地址:輸出ARP消息格式中的目的IP地址字段。l 目的MAC地址:輸出ARP消息格式中的目的物理地址字段。l 操作:輸出ARP消息格式中的操作字段,若為ARP請求,則為1,若為ARP應(yīng)答,則為2。l 時間:該ARP包產(chǎn)生的時間3.當(dāng)程序接
3、收到鍵盤輸入Ctrl+C時退出。三、課程設(shè)計分析1課程設(shè)計中的重點(diǎn)及難點(diǎn)1) 程序中會用到Winpcap,Winpcap是Win32環(huán)境下數(shù)據(jù)包捕獲的開放代碼函數(shù)庫。基于Winpcap的應(yīng)用程序一般按照下面幾個步驟進(jìn)行設(shè)計:l 輸出網(wǎng)卡設(shè)備列表。l 選擇網(wǎng)卡并打開。l 捕獲數(shù)據(jù)包時,可能需要設(shè)置過濾器。l 捕獲數(shù)據(jù)包或者發(fā)送數(shù)據(jù)包。2) 在程序設(shè)計過程中需要注意網(wǎng)絡(luò)主機(jī)字節(jié)順序的轉(zhuǎn)化。由于不同的計算機(jī)系統(tǒng)所采用的數(shù)據(jù)表示方式不同,對于2B或4B的數(shù)據(jù),有的采用低字節(jié)地址存放數(shù)據(jù)的高權(quán)值位,而有的卻以低地址字節(jié)存放數(shù)據(jù)低權(quán)位值,在網(wǎng)絡(luò)的數(shù)據(jù)傳輸中,我們應(yīng)該統(tǒng)一表示,所以我們在捕獲數(shù)據(jù)包后,應(yīng)將數(shù)
4、據(jù)包頭部的表示長度或類型的數(shù)據(jù)轉(zhuǎn)換成本地機(jī)的表達(dá)形式??梢岳煤瘮?shù)ntohs()將網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換為主機(jī)字節(jié)序。3) 選擇網(wǎng)卡并打開時,注意選擇可用的網(wǎng)卡。2.參考算法1) 取得當(dāng)前網(wǎng)卡設(shè)備列表。2) 選擇Ethernet網(wǎng)卡并打開,注意判斷所選網(wǎng)卡是否為實(shí)際存在的可用網(wǎng)卡。3) 設(shè)置過濾器,此處的過濾器正則表達(dá)式為“arp”或者“ether protoarp”。4) 捕獲數(shù)據(jù)包并進(jìn)行處理(包括輸出各IP地址,物理地址,操作類型以及時間)。由于要記錄日志文件,為了便于輸出流參數(shù),建議采用pcap_next_ex()函數(shù)。流程圖如下圖所示:開始獲取網(wǎng)卡列表選取Ethernet網(wǎng)卡打開網(wǎng)卡(混雜模式
5、)編譯設(shè)置過濾器捕獲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; /硬件地址長度。值為06unsigned char prosize; /協(xié)議地址長度。值為04unsigned short op; /操作值為0001/0002,分別表示ARP請求/應(yīng)答u_char smac6; /源MAC地址,6Bu_char sip4; /源IP地址,
6、4Bu_char dmac6; /目的MAC地址u_char dip4; /目的IP地址;l 獲取網(wǎng)絡(luò)設(shè)備列表,并以混雜模式打開網(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) /以混雜模式打開網(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 編譯過濾器并設(shè)置過濾器,只捕獲ARP數(shù)據(jù)包c(diǎn)har packet_filter=”ether proto arp”; /過濾,選擇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è)置過濾器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ù)包的各個域的內(nèi)容到文件和屏幕上 四、源程序及運(yùn)行截圖1.源程序如下:#include<winsock2.h>#pragma comment(lib,"Ws2_32.lib") /用到ntobs()/等同于點(diǎn)擊"project-setting-link"打開object/library module編輯框后加入文件#pragma comment(lib,"wpcap.lib")#include &
10、quot;pcap.h" /此頭文件沒有包含在VC中,需要另外加入#include<fstream.h>#include<iomanip.h> /格式化輸出需要用到#include<conio.h> /用到_getch()/注意到接收的數(shù)據(jù)包頭中代表類型,數(shù)據(jù)長度的字段采用的是big-endian/所以對于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; /硬件地址長度。值為06unsigned char prosize; /協(xié)議地址長度。值為04unsigned short op; /操作值為0001/0002,分別表示ARP請求/應(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;/編譯過濾器,只捕獲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è)置過濾器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); /日志記錄文件/為了查看日志時的方便,其中加入了日期記錄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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度多功能廳場地租賃合同范本2篇
- 綠色能源投資基金合作協(xié)議
- 金融機(jī)構(gòu)風(fēng)險管理合作協(xié)議
- 2025年度校園招聘與人才引進(jìn)合同3篇
- 2025年度版權(quán)許可使用合同標(biāo)的及期限2篇
- 餐飲業(yè)智慧餐廳與點(diǎn)餐系統(tǒng)開發(fā)方案
- 二零二五年度合伙開設(shè)武術(shù)館經(jīng)營合同3篇
- 二零二五年度國際投資法律文件審核合同3篇
- 公開招聘專職人員報名表
- 康塔高壓氣體吸附儀安全操作規(guī)程
- 散狀料上料安全操作規(guī)程模版(3篇)
- 《個案工作介入涉罪未成年人的家庭幫教研究》
- 統(tǒng)編版(2024新版)七年級上冊道德與法治期末綜合測試卷(含答案)
- 文化創(chuàng)意合作戰(zhàn)略協(xié)議
- 國家開放大學(xué)法學(xué)本科《商法》歷年期末考試試題及答案題庫
- 安全管理人員安全培訓(xùn)教材
- 2024年婦保科工作總結(jié)及計劃
- (T8聯(lián)考)2025屆高三部分重點(diǎn)中學(xué)12月第一次聯(lián)考評物理試卷(含答案詳解)
- 北京理工大學(xué)《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計》2022-2023學(xué)年第一學(xué)期期末試卷
- 錨桿(索)支護(hù)工技能理論考試題庫200題(含答案)
- 影視后期制作團(tuán)隊薪酬激勵方案
評論
0/150
提交評論