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

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告題目:解析EthernetARP數(shù)據(jù)包問題描述通過編制程序,獲取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。程序的具體要求如下所示:1,以命令行的形式運(yùn)行,如下所示:arparp.log其中,arp為程序名arp.log為日志文件名。2,程序輸出內(nèi)容如下所示:源IP地址源MAC地址目的IP地址目的MC地址操作時(shí)間各部分的說明如下所示:源IP地址:輸出ARP消息格式中的源IP地址字段源MAC地址:輸出ARP消息格式中的源物理地址字段目的IP地址:輸出ARP消息格式中的目的IP地址字段目的MAC地址:輸出ARP消息格式中的目的物理地址字段操作:輸出ARP消息格式中的操作字段,若為ARP請(qǐng)求,則為1,若為ARP應(yīng)答,則為2,時(shí)間:該ARP包產(chǎn)生的時(shí)間3,當(dāng)程序接收到鍵盤輸入Ctrl+C時(shí)字段退出。概要設(shè)計(jì)首先取得當(dāng)前網(wǎng)卡設(shè)備列表,利用PCAP提供的PCAP_findalldevs()函數(shù)實(shí)現(xiàn)此功能.其次選擇Ethernet網(wǎng)卡并打開,注意判斷所選網(wǎng)卡是否為實(shí)際存在的可用網(wǎng)卡。然后設(shè)置過濾器,使其只捕獲ARP包.過濾函數(shù)PCAP_complie和PCAP_setfilter.設(shè)置函數(shù)為PCAP_setfilter().最后捕獲數(shù)據(jù)包并進(jìn)行處理(包括輸出各IP地址,物理地址,操作類型以及時(shí)間)。由于要記錄日志文件,為了便于輸出流參數(shù),使pcap_next_ex()函數(shù)。ARP數(shù)據(jù)結(jié)構(gòu)及流程圖如下。ARP數(shù)據(jù)包結(jié)構(gòu)structarppkt{unsignedshorthdtyp;//硬件地址值0001表示其為Ethernet unsignedshortprotyp;/協(xié)議類型值0800表示上層協(xié)議為IP unsignedcharhdsize;//硬件地址長(zhǎng)度 unsignedcharprosize;//協(xié)議地址長(zhǎng)度 unsignedshortop;//操作值 u_charsmac[6];//源MAC地址 u_charsip[4];//源IP地址 u_chardmac[6];//目的MAC地址 u_chardip[4];//目的IP地址};詳細(xì)設(shè)計(jì)voidpacket_handler(constpcap_pkthdr*header,constu_char*pkt_data,ostream&);voidmain(){ char*argv="arp.log"; pcap_if_t*alldevs;//網(wǎng)絡(luò)設(shè)備結(jié)構(gòu) pcap_if_t*d; pcap_t*adhandle; charerrbuf[PCAP_ERRBUF_SIZE];//錯(cuò)誤信息 u_intnetmask;//子網(wǎng)掩碼 charpacket_filter[]="etherproto\\arp";//過濾,選擇ARP協(xié)議 structbpf_programfcode; structpcap_pkthdr*header; constu_char*pkt_data; //獲取本機(jī)網(wǎng)卡列表 if(pcap_findalldevs(&alldevs,errbuf)==-1) { cout<<"Errorinpcap_findalldevs:"<<errbuf; return; } inti=0; cout<<"本機(jī)網(wǎng)卡列表如下:"<<endl; //打印網(wǎng)卡列表 for(d=alldevs;d!=NULL;d=d->next) { printf("%d.%s",++i,d->name); if(d->description) printf("(%s)\n",d->description); else printf("(沒有可用的網(wǎng)絡(luò)設(shè)備)\n"); } if(i==0) { printf("\nNointerfacesfound!MakesureWinPcapisinstalled.\n"); return; } //選擇一個(gè)Ethernetka卡 intinum; printf("Entertheinterfacenumber(1-%d):",i); scanf("%d",&inum);for(;inum<1||inum>i;) { printf("\nInterfacenumberoutofrange.\n"); printf("Pleaseinput'Ctrl+C'finishthisoperationOr\nEntertheinterfacenumber(1-%d):",i); scanf("%d",&inum); } //跳轉(zhuǎn)到選中的適配器 for(d=alldevs,i=0;i<inum-1;d=d->next,i++); //以混雜模式打開網(wǎng)卡,接受所有的幀 if((adhandle=pcap_open_live(d->name,1000,1,300,errbuf))==NULL) { cout<<"\nUnabletoopentheadapter."; pcap_freealldevs(alldevs);//釋放設(shè)備列表 return; } if(!(pcap_datalink(adhandle)==DLT_EN10MB&&d->addresses!=NULL))//檢查數(shù)據(jù)鏈路是否為Ethernet(DLT_EN10MB) { cout<<"Error"<<endl; return; } //獲得子網(wǎng)掩碼 netmask=((sockaddr_in*)(d->addresses->netmask))->sin_addr.S_un.S_addr; //調(diào)試過濾器,只捕獲ARP包 if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0) { cout<<"\nUnabletocompilethepacketfilter.Checkthesyntax.\n"; pcap_freealldevs(alldevs); return; } //設(shè)置過濾器 if(pcap_setfilter(adhandle,&fcode)<0) { cout<<"\nErrorsettingthefilter.\n"; pcap_freealldevs(alldevs); return; } cout<<"\t\tlisteningon"<<d->description<<"..."<<endl<<endl; ofstreamfout(argv,ios::app);//日志記錄文件 //加入日期記錄 time_tt; time(&t); fout.seekp(0,ios::end); if(int(fout.tellp())!=0) fout<<endl; fout<<"\t\tARPrequest(1)/replay(2)on"<<ctime(&t); cout<<"sourIPAddr"<<""<<"SourMACAddress" <<""<<"DesIPAddr"<<""<<"DesMACAddress" <<""<<"OP"<<""<<"Time"<<endl; fout<<"SourIPAddr"<<""<<"SourMACAddress" <<""<<"DesIPAddr"<<""<<"DesMACAddress" <<""<<"OP"<<""<<"Time"<<endl; //釋放設(shè)備列表 pcap_freealldevs(alldevs); //開始捕獲MAC幀 intresult;//時(shí)間到返回結(jié)果 while((result=pcap_next_ex(adhandle,&header,&pkt_data))>=0) { if(result==0) continue; packet_handler(header,pkt_data,cout);//解析ARP包,輸出結(jié)果 packet_handler(header,pkt_data,fout);//輸出到文件 }}voidpacket_handler(constpcap_pkthdr*header,constu_char*pkt_data,ostream&out){ inti; //從截獲的數(shù)據(jù)幀中找到arp包頭的位置 arppkt*arph=(arppkt*)(pkt_data+14);//14為Ethernet幀頭的長(zhǎng)度 //輸出源IP地址 for(i=0;i<3;i++) out<<int(arph->sip[i])<<'.'; out.setf(ios::left); out<<setw(3)<<int(arph->sip[3])<<""; out.unsetf(ios::left); //輸出源MAC地址 charoldfillchar=out.fill('0'); out.setf(ios::uppercase);//MAC地址以分開'-'的大寫字符表示 for(i=0;i<5;i++) out<<hex<<setw(2)<<int(arph->smac[i])<<'_'; out<<hex<<setw(2)<<int(arph->smac[5])<<""; out.fill(oldfillchar); //輸出目的的IP地址 out.unsetf(ios::hex|ios::uppercase); for(i=0;i<3;i++) out<<int(arph->dip[i])<<'.'; out.setf(ios::left); out<<setw(3)<<int(arph->dip[3])<<""; out.unsetf(ios::left); //輸出目的MAC地址 out.fill('0'); out.setf(ios::uppercase); for(i=0;i<5;i++) out<<hex<<setw(2)<<int(arph->dmac[i])<<'_'; out<<hex<<setw(2)<<int(arph->dmac[5])<<""; out.fill(oldfillchar); out.unsetf(ios::hex|ios::uppercase); out<<ntohs(arph->op)<<"";//輸出的操作類型,注意網(wǎng)絡(luò)字節(jié)間的轉(zhuǎn)換 structtm*ltime;//時(shí)間longtime=(long)header->ts.tv_sec; ltime=localtime(&time); out.fill('0'); out<<ltime->tm_hour<<':'<<setw(2)<<ltime->tm_min<<':'<<setw(2)<<ltime->tm_sec; out.fill(oldfillchar); out<<endl;}調(diào)試分析在最開始運(yùn)行該程序時(shí),出現(xiàn)了很多問題。比如:沒有正確的導(dǎo)入本程序所需要的數(shù)據(jù)庫(kù);重復(fù)定義一個(gè)變量;運(yùn)行界面不夠美觀。對(duì)于沒能正確導(dǎo)入數(shù)據(jù)庫(kù),我們充分發(fā)揮了網(wǎng)絡(luò)的功能,下載、安裝并導(dǎo)入了數(shù)據(jù)庫(kù)。將程序改動(dòng)后,重復(fù)定義變量和運(yùn)行界面不夠美觀的問題也解決了。五、心得體會(huì)本次課程設(shè)計(jì),完成了解析ARP數(shù)據(jù)包的編寫。在此期間我們查閱了大量的案例,學(xué)到了很多知識(shí),使我們對(duì)計(jì)算機(jī)網(wǎng)絡(luò)有了更深入的了解。在具體實(shí)現(xiàn)獲取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包解析數(shù)據(jù)包的內(nèi)容,并將其寫入日志文件的過程中,是我們更加清楚物理地址、IP地址的關(guān)聯(lián),源地址與目的地址的關(guān)系,以及二者對(duì)數(shù)據(jù)類型的格式要求。最重要的是通過這次的實(shí)際訓(xùn)練讓我們對(duì)ARP協(xié)議更加理解。課程設(shè)計(jì)是培養(yǎng)我們綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn)、提出、分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論