版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)網(wǎng)絡(luò)解析ARP數(shù)據(jù)包計(jì)算機(jī)網(wǎng)絡(luò)解析ARP數(shù)據(jù)包沈陽(yáng)理工大學(xué)課程設(shè)計(jì)專用紙NoPAGE1沈陽(yáng)理工大學(xué)成績(jī)?cè)u(píng)定表學(xué)生姓名班級(jí)學(xué)號(hào)1103050409專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)課程設(shè)計(jì)題目解析ARP數(shù)據(jù)包評(píng)語(yǔ)組長(zhǎng)簽字:成績(jī)?nèi)掌?0年月日課程設(shè)計(jì)任務(wù)書(shū)學(xué)院信息科學(xué)與工程學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級(jí)學(xué)號(hào)課程設(shè)計(jì)題目解析ARP數(shù)據(jù)包實(shí)踐教學(xué)要求與任務(wù):1.課程設(shè)計(jì)的目的是對(duì)網(wǎng)絡(luò)上的ARP數(shù)據(jù)包進(jìn)行解析,從而熟悉ARP數(shù)據(jù)包的結(jié)構(gòu),對(duì)ARP協(xié)議有更好的理解和認(rèn)識(shí)。2.通過(guò)編寫程序,獲取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。工作計(jì)劃與進(jìn)度安排:第15周星期一:設(shè)計(jì)任務(wù)分析和總體設(shè)計(jì)星期二:軟件算法和流程設(shè)計(jì)星期三:軟件編碼實(shí)現(xiàn)星期四:軟件總體調(diào)試星期五:交課程設(shè)計(jì)報(bào)告、答辯、驗(yàn)收程序1課程設(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í)。2課程設(shè)計(jì)要求通過(guò)編寫程序,獲取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。程序的具體要求如下所示:以命令行的形式運(yùn)行,如下所示:ParseArplog_file其中,arpparse為程序名;log_file為日志文件名。(2)程序輸出內(nèi)容如下所示:源IP地址源MAC地址目的IP地址目的MAC地址操作時(shí)間各部分的說(shuō)明如下所示:源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í)字段退出。相關(guān)知識(shí)(1)什么是ARP地址解析協(xié)議(AddressResolutionProtocol,ARP)是在僅知道主機(jī)的IP地址時(shí)確定其物理地址的一種協(xié)議。因IPv4和以太網(wǎng)的廣泛應(yīng)用,其主要用作將IP地址翻譯為以太網(wǎng)的MAC地址,但其也能在ATM和FDDIIP網(wǎng)絡(luò)中使用。從IP地址到物理地址的映射有兩種方式:表格方式和非表格方式。ARP具體說(shuō)來(lái)就是將網(wǎng)絡(luò)層(IP層,也就是相當(dāng)于OSI的第三層)地址解析為數(shù)據(jù)連接層(MAC層,也就是相當(dāng)于OSI的第二層)的MAC地址。 在以太網(wǎng)協(xié)議中規(guī)定,同一局域網(wǎng)中的一臺(tái)主機(jī)要和另一臺(tái)主機(jī)進(jìn)行直接通信,必須要知道目標(biāo)主機(jī)的MAC地址。而在TCP/IP協(xié)議棧中,網(wǎng)絡(luò)層和傳輸層只關(guān)心目標(biāo)主機(jī)的IP地址。這就導(dǎo)致在以太網(wǎng)中使用IP協(xié)議時(shí),數(shù)據(jù)鏈路層的以太網(wǎng)協(xié)議接到上層IP協(xié)議提供的數(shù)據(jù)中,只包含目的主機(jī)的IP地址。于是需要一種方法,根據(jù)目的主機(jī)的IP地址,獲得其MAC地址。這就是ARP協(xié)議要做的事情。所謂地址解析(addressresolution)就是主機(jī)在發(fā)送幀前將目標(biāo)IP地址轉(zhuǎn)換成目標(biāo)MAC地址的過(guò)程。另外,當(dāng)發(fā)送主機(jī)和目的主機(jī)不在同一個(gè)局域網(wǎng)中時(shí),即便知道目的主機(jī)的MAC地址,兩者也不能直接通信,必須經(jīng)過(guò)路由轉(zhuǎn)發(fā)才可以。所以此時(shí),發(fā)送主機(jī)通過(guò)ARP協(xié)議獲得的將不是目的主機(jī)的真實(shí)MAC地址,而是一臺(tái)可以通往局域網(wǎng)外的路由器的某個(gè)端口的MAC地址。于是此后發(fā)送主機(jī)發(fā)往目的主機(jī)的所有幀,都將發(fā)往該路由器,通過(guò)它向外發(fā)送。這種情況稱為ARP代理(ARPProxy)。(2)ARP數(shù)據(jù)報(bào)的消息格式網(wǎng)絡(luò)上的每臺(tái)主機(jī)或設(shè)備都有一個(gè)或多個(gè)IP地址。IP地址是網(wǎng)絡(luò)層的地址,在網(wǎng)絡(luò)層,數(shù)據(jù)被組裝成IP包。但是發(fā)送IP包需要物理設(shè)備的支持(通常是Ethernet設(shè)備,在本課程設(shè)計(jì)中我們指定為Ethernet設(shè)備),即發(fā)送端必須知道目的物理地址才能將IP包發(fā)送出去,所以需要一種將IP地址映射為物理地址的機(jī)制。ARP協(xié)議就是用來(lái)完成這個(gè)任務(wù)的。ARP協(xié)議能夠在同一個(gè)物理網(wǎng)絡(luò)中,在給定目的主機(jī)或設(shè)備的IP地址的條件下,得到目的主機(jī)或設(shè)備的物理地址。ARP協(xié)議的數(shù)據(jù)包格式如圖所示:08162431(位)硬件類型協(xié)議類型物理地址長(zhǎng)度協(xié)議地址長(zhǎng)度操作源物理地址(八位組0~3)源物理地址(八位組4~5)源IP地址(八位組0~1)源IP地址(八位組2~3)目的物理地址(八位組0~1)目的物理地址(八位組2~5)目的IP地址(八位組0~3)ARP數(shù)據(jù)包的消息格式下面對(duì)數(shù)據(jù)包的各個(gè)部分進(jìn)行說(shuō)明硬件類型:指定硬件接口類型。例如,值為1表示Ethernet協(xié)議類型:指定發(fā)送方支持的上層協(xié)議的類型物理地址長(zhǎng)度:指定物理(硬件)地址的長(zhǎng)度協(xié)議地址長(zhǎng)度:網(wǎng)絡(luò)層協(xié)議的地址長(zhǎng)度。若為IP協(xié)議,其值為4操作:指定ARP的操作類型,例如,1表示ARP請(qǐng)求,2表示ARP應(yīng)答源物理地址:指定發(fā)送方的IP地址目的物理地址:指定目的物理地址。目的IP地址:指定目的IP地址ARP分組必須在數(shù)據(jù)鏈路層中被封裝成偵,才能發(fā)送出去封裝形式如圖所示ARP消息ARP消息幀頭部幀數(shù)據(jù)幀頭部幀數(shù)據(jù)將ARP數(shù)據(jù)包封裝成一個(gè)幀(3)ARP協(xié)議的工作流程。在發(fā)送一個(gè)ARP分組之前,源主機(jī)首先根據(jù)目的IP地址,在本地ARP高速緩存表中查找與之對(duì)應(yīng)的目的物理地址。如果找到對(duì)應(yīng)的物理地址,就不用進(jìn)行地址解析,否則需要進(jìn)行地址解析。實(shí)現(xiàn)地址解析的第一步是產(chǎn)生ARP請(qǐng)求分組。在相應(yīng)的字段寫入本地主機(jī)的源物理地址、源IP地址,在目的物理地址字段寫入0,并在操作字段寫入1。將ARP分組發(fā)送到本地的數(shù)據(jù)鏈路層,并封裝成幀。以源物理地址作為源地址,以物理廣播地址(FF-FF-FF-FF-FF-FF)作為目的地址,通過(guò)物理層發(fā)送出去。由于采用了廣播地址,因此網(wǎng)段內(nèi)所有的主機(jī)或設(shè)備都能接受到該幀。除了目的主機(jī)外,所有接受到該分組的主機(jī)和設(shè)備都會(huì)丟棄該分組,因?yàn)槟康闹鳈C(jī)能夠識(shí)別ARP消息中的目的IP地址。目的主機(jī)發(fā)送ARP應(yīng)答分組。在ARP應(yīng)答分組中,以請(qǐng)求分組中源物理地址、源IP地址作為其目的物理地址、目的IP地址,并將目的主機(jī)自身的物理地址、IP地址填入應(yīng)答分組的源物理地址、源IP地址字段,并在操作字段中寫入2。該分組通過(guò)數(shù)據(jù)鏈路層以點(diǎn)對(duì)點(diǎn)的方式發(fā)送出去(因?yàn)楝F(xiàn)在目的方已經(jīng)知道雙方的物理地址)。源結(jié)點(diǎn)接收到ARP應(yīng)答分組,知道對(duì)應(yīng)于目的IP地址的目的物理地址,將它作為一條新記錄加入到ARP高速緩存表。源結(jié)點(diǎn)將有完整源IP地址、源物理地址、目的IP地址、目的物理地址的信息和數(shù)據(jù)作為一個(gè)發(fā)送分組,傳送給它的數(shù)據(jù)鏈路層并封裝成楨,然后以點(diǎn)對(duì)點(diǎn)的方式發(fā)送到目的主機(jī)。課程設(shè)計(jì)分析課程設(shè)計(jì)中的重點(diǎn)及難點(diǎn)程序中會(huì)用到Winpcap,Winpcap是Win32環(huán)境下數(shù)據(jù)包捕獲的開(kāi)放代碼函數(shù)庫(kù)?;赪inpcap的應(yīng)用程序一般按照下面幾個(gè)步驟進(jìn)行設(shè)計(jì):輸出網(wǎng)卡設(shè)備列表。選擇網(wǎng)卡并打開(kāi)。捕獲數(shù)據(jù)包時(shí),可能需要設(shè)置過(guò)濾器。捕獲數(shù)據(jù)包或者發(fā)送數(shù)據(jù)包。在程序設(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ù)據(jù)包頭部的表示長(zhǎng)度或類型的數(shù)據(jù)轉(zhuǎn)換成本地機(jī)的表達(dá)形式??梢岳煤瘮?shù)ntohs()將網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換為主機(jī)字節(jié)序。選擇網(wǎng)卡并打開(kāi)時(shí),注意選擇可用的網(wǎng)卡。參考算法取得當(dāng)前網(wǎng)卡設(shè)備列表。選擇Ethernet網(wǎng)卡并打開(kāi),注意判斷所選網(wǎng)卡是否為實(shí)際存在的可用網(wǎng)卡。設(shè)置過(guò)濾器,此處的過(guò)濾器正則表達(dá)式為“arp”或者“etherproto\\arp”。捕獲數(shù)據(jù)包并進(jìn)行處理(包括輸出各IP地址,物理地址,操作類型以及時(shí)間)。由于要記錄日志文件,為了便于輸出流參數(shù),建議采用pcap_next_ex()函數(shù)。流程圖如圖所示:開(kāi)始開(kāi)始獲取網(wǎng)卡列表獲取網(wǎng)卡列表選取Ethernet網(wǎng)卡選取Ethernet網(wǎng)卡打開(kāi)網(wǎng)卡(混雜模式)打開(kāi)網(wǎng)卡(混雜模式)編譯設(shè)置過(guò)濾器編譯設(shè)置過(guò)濾器捕獲ARP包并將其相應(yīng)內(nèi)容輸出捕獲ARP包并將其相應(yīng)內(nèi)容輸出程序代碼#include<conio.h>#include<fstream.h>#include<iomanip.h>#include"pcap.h"#include<winsock2.h>#pragmacomment(lib,"ws2_32.lib")#pragmacomment(lib,"wpcap.lib")//定義ARP包數(shù)據(jù)structarppkt{ unsignedshorthdtyp;//硬件類型 unsignedshortprotyp;//協(xié)議類型 unsignedcharhdsize;//硬件地址長(zhǎng)度 unsignedcharprosize;//協(xié)議地址長(zhǎng)度 unsignedshortop;//(操作類型)操作值:ARP/RARP u_charsmac[6];//源MAC地址 u_charsip[4];//源IP地址 u_chardmac[6];//目的MAC地址 u_chardip[4];//目的IP地址};voidpacket_handler(constpcap_pkthdr*header,constu_char*pkt_data,ostream&out){//從ARP包中找到頭部位置arppkt*arph=(arppkt*)(pkt_data+14); //輸出源IP地址for(inti=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);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);out.unsetf(ios::hex|ios::uppercase); //輸出目的IP地址for(i=0;i<3;i++)out<<int(arph->dip[3])<<'.'; out.unsetf(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)<<""; //輸出操作時(shí)間 structtm*ltime; ltime=localtime(&header->ts.tv_sec); out.fill('0'); out<<ltime->tm_hour<<':'<<setw(2)<<ltime->tm_min<<':'<<setw(2)<<ltime->tm_sec; out.fill(oldfillchar); out<<endl;}voidmain(intargc,char*argv[])//命令行參數(shù){ //檢查輸入命令格式 if(argc!=2) { cout<<"Pleaseinputcommand:ParseArpoutput_file"<<endl; return; } //初始化網(wǎng)絡(luò)設(shè)備相關(guān)參數(shù) pcap_if_t*alldevs; pcap_if_t*d; pcap_t*adhandle; charerrbuf[PCAP_ERRBUF_SIZE]; u_intnetmask; charpacket_filter[]="etherproto\\arp"; structbpf_programfcode; structpcap_pkthdr*header; constu_char*pkt_data; //獲取網(wǎng)絡(luò)設(shè)備列表 if(pcap_findalldevs(&alldevs,errbuf)==-1) { cout<<"Errorinpcap_findalldevs:"<<errbuf; return; } //選取一個(gè)Ethernet網(wǎng)卡 for(d=alldevs;d;d=d->next) { // 網(wǎng)卡設(shè)為混雜模式,接收所有幀 if((adhandle=pcap_open_live(d->name,1000,1,300,errbuf))==NULL) { cout<<"\nUnabletoopentheadapter."; pcap_freealldevs(alldevs); return; } //檢查數(shù)據(jù)鏈路是否為Ethernet if(pcap_datalink(adhandle)==DLT_EN10MB&&d->addresses!=NULL) break; }if(d==NULL){cout<<"\nNointerfacesfound!MakesureWinpcapisinstalled.\n";return;}//獲得子網(wǎng)掩碼netmask=((sockaddr_in*)(d->addresses->netmask))->sin_addr.S_un.S_addr;//編譯過(guò)濾器,只捕獲ARP包if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0){cout<<"\nUnabletocompilethepacketfilter.Checkthesyntax.\n";pcap_freealldevs(alldevs);return;}//設(shè)置過(guò)濾器if(pcap_setfilter(adhandle,&fcode)<0){cout<<"\nErrorsettingthefilter.\n";pcap_freealldevs(alldevs);return;}//顯示提示信息及每項(xiàng)含義cout<<"listeningon"<<d->description<<"..."<<endl<<endl;ofstreamfout(argv[1],ios::app);//日志記錄文件//為了查看日志時(shí)的方便,其中加入了日期記錄time_tt;time(&t);fout.seekp(0,ios::end);if(fout.tellp()!=0)fout<<endl;fout<<"\t\tARPrequest(1)/reply(2)on"<<ctime(&t);cout<<"SourIpAddr"<<""<<"SourMACAddress"<<""<<"DesIpAddr"<<""<<"DesMACAddress"<<""<<"OP"<<""<<"Time"<<endl;fout<<"SourIpAddr"<<""<<"SourMACAddress"<<""<<"DesIpAddr"<<""<<"DesMACAddress"<<""<<"OP"<<""<<"Time"<<endl;//釋放設(shè)備列表pcap_freealldevs(alldevs);//開(kāi)始截獲ARP包intresult;while((result=pcap_next_ex(adhandle,&header,&pkt_data))>=0){//循環(huán)解析ARP數(shù)據(jù)包if(result==0)continue; //解析ARP包,結(jié)果輸出到屏幕與文件packet_handler(header,pkt_data,cout);packet_handler(header,pkt_data,fout);}}運(yùn)行結(jié)果與分析相關(guān)擴(kuò)展與分析:本課程設(shè)計(jì)還可以在Linux環(huán)境下用rawsocket完成。算法和代碼提示:調(diào)用socket()打開(kāi)協(xié)議簇為PF_PACKET的原始套接字,這樣我們就可以收到數(shù)據(jù)鏈路幀:intfd=socket(PF_PACKET,SOCK_RAM,htons(ETH_P_ALL));對(duì)打開(kāi)的套接字調(diào)用ioct1(),將網(wǎng)卡設(shè)置為混雜模式,這樣我們就可以接受到局域網(wǎng)中所有的包(包括目的地址不是本機(jī)的幀):structifreqreq;memset(&req,0,sizeof(req));strncpy(req.ifr_name,”eth0”,strlen(“eth0”)+1);ioctl(fd,SIOCGIFFLAS,&req);req.ifr_flags|=IFF_PROMISC;//設(shè)置為混雜模式icotl(fd,SIOCGIFFLAGS,&req);利用recvfrom()接收包:recvform(fd,buffer,sizeof(buffer),0,(structsockaddr*)&fro
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年山東省菏澤市高二下學(xué)期期中考試歷史試題(A)(解析版)
- 2024-2025學(xué)年江蘇省鹽城市高二下學(xué)期期終考試歷史試題(解析版)
- 2026年生物與醫(yī)學(xué)前沿科技知識(shí)競(jìng)賽題集
- 2026年計(jì)算機(jī)應(yīng)用基礎(chǔ)初級(jí)水平測(cè)試題
- 2026年心理學(xué)入門認(rèn)知心理學(xué)與社會(huì)心理學(xué)試題庫(kù)
- 2026年城市規(guī)劃領(lǐng)域?qū)I(yè)技術(shù)人員考試練習(xí)題集
- 2026年文化常識(shí)與歷史知識(shí)綜合測(cè)試題
- 2026年高考化學(xué)模擬試題及答案解析
- 2026年寫作技巧基礎(chǔ)訓(xùn)練初級(jí)自測(cè)模擬題
- 2026年房地產(chǎn)銷售經(jīng)理人才選拔模擬測(cè)試
- 設(shè)備安裝施工應(yīng)急預(yù)案
- 拼多多會(huì)計(jì)課件
- 卡西歐手表WVA-M600(5161)中文使用說(shuō)明書(shū)
- 電力高處作業(yè)培訓(xùn)
- 人臉門禁系統(tǒng)管理制度
- 辦公設(shè)備清單表格
- 環(huán)保隱患分級(jí)管理制度
- 《鐵路運(yùn)輸調(diào)度》課件全套 孫建暉 第1-5章 貨物列車編組計(jì)劃- 調(diào)度工作分析
- 三力測(cè)試題庫(kù)200題及答案
- 董事委任協(xié)議書(shū)
- 電商客服知識(shí)考試試題及答案
評(píng)論
0/150
提交評(píng)論