




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、成績:網(wǎng)絡(luò)協(xié)議分析報(bào)告題目:獲取并解析網(wǎng)絡(luò)中的ARP數(shù)據(jù)包學(xué)院:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級:0411203學(xué)號:2012211699姓名:李傳根1、 要求及功能 編程序,獲取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。運(yùn)行格式:程序名 日志文件2、 原理及方法 2.0什么是ARP地址解析協(xié)議(Address Resolution Protocol,ARP)是在僅知道主機(jī)的IP地址時(shí)確定其物理地址的一種協(xié)議。因IPv4和以太網(wǎng)的廣泛應(yīng)用,其主要用作將IP地址翻譯為以太網(wǎng)的MAC地址,但其也能在ATM和FDDIIP網(wǎng)絡(luò)中使用。從IP地址到
2、物理地址的映射有兩種方式:表格方式和非表格方式。ARP具體說來就是將網(wǎng)絡(luò)層(IP層,也就是相當(dāng)于OSI的第三層)地址解析為數(shù)據(jù)連接層(MAC層,也就是相當(dāng)于OSI的第二層)的MAC地址。在以太網(wǎng)協(xié)議中規(guī)定,同一局域網(wǎng)中的一臺主機(jī)要和另一臺主機(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é)議要做的事情。所謂地址解析(address resoluti
3、on)就是主機(jī)在發(fā)送幀前將目標(biāo)IP地址轉(zhuǎn)換成目標(biāo)MAC地址的過程。 另外,當(dāng)發(fā)送主機(jī)和目的主機(jī)不在同一個(gè)局域網(wǎng)中時(shí),即便知道目的主機(jī)的MAC地址,兩者也不能直接通信,必須經(jīng)過路由轉(zhuǎn)發(fā)才可以。所以此時(shí),發(fā)送主機(jī)通過ARP協(xié)議獲得的將不是目的主機(jī)的真實(shí)MAC地址,而是一臺可以通往局域網(wǎng)外的路由器的某個(gè)端口的MAC地址。于是此后發(fā)送主機(jī)發(fā)往目的主機(jī)的所有幀,都將發(fā)往該路由器,通過它向外發(fā)送。這種情況稱為ARP代理(ARP Proxy)。2.1、ARP協(xié)議及工作原理ARP協(xié)議是“Address Resolution Protocol”(地址解析協(xié)議)的縮寫。在局域網(wǎng)中,網(wǎng)絡(luò)中實(shí)際傳輸?shù)氖恰皫?,幀里?/p>
4、是有目標(biāo)主機(jī)的MAC地址的。在以太網(wǎng)中,一個(gè)主機(jī)要和另一個(gè)主機(jī)進(jìn)行直接通信,必須要知道目標(biāo)主機(jī)的MAC地址。但這個(gè)目標(biāo)MAC地址是如何獲得的呢?它就是通過地址解析協(xié)議獲得的。所謂“地址解析”就是主機(jī)在發(fā)送幀前將目標(biāo)IP地址轉(zhuǎn)換成目標(biāo)MAC地址的過程。ARP協(xié)議的基本功能就是通過目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行。ARP的基本運(yùn)行過程:1、 主機(jī)A希望發(fā)送數(shù)據(jù)分組給主機(jī)B,但不知道B的物理地址。2、 A發(fā)送廣播報(bào)文,要求B主機(jī)用用他的物理地址來響應(yīng)。3、 網(wǎng)站上所有的主機(jī)都接收到這個(gè)分組。4、 B識別自己的IP地址,發(fā)送響應(yīng)報(bào)文,告訴A自己的物理地址。2.2、AR
5、P 的分組格式物理幀頭(14B)ARP幀結(jié)構(gòu)(28B)填充數(shù)據(jù)(18B)CRC(4B)圖一 ARP分組格式目的MAC(6B)源MAC(6B)類型(2B) 圖二 物理幀頭0 8 16 24 32硬件類型(Ethernet:0x1)上層協(xié)議類型(IP:0x0800)硬件地址長度(0x6)IP地址長度(0x4)操作(請求:0x1;應(yīng)答:0x2)源MAC地址源MAC地址源IP地址源IP地址目的MAC地址目的MAC地址目的IP地址圖三 ARP幀結(jié)構(gòu)2.3工作原理源主機(jī)在傳輸數(shù)據(jù)前,首先要對數(shù)據(jù)進(jìn)行封裝,在該過程中會把目的主機(jī)的IP地址和MAC地址封裝進(jìn)去。在通信的初始階段,我們能夠知道目的主機(jī)的IP地址
6、,而MAC地址是不知道的。這時(shí)如果目的主機(jī)和源主機(jī)在同一網(wǎng)絡(luò)內(nèi),源主機(jī)會以第二層廣播的方式發(fā)送ARP請求報(bào)文。ARP請求報(bào)文中含有源主機(jī)的IP地址和MAC地址,以及目的主機(jī)的IP地址。當(dāng)報(bào)文通過廣播的方式到達(dá)目的主機(jī)時(shí),目的主機(jī)會響應(yīng)請求報(bào)文,并返回ARP響應(yīng)報(bào)文,從而源主機(jī)就可以獲得目的主機(jī)的MAC地址,同樣目的主機(jī)也可以獲得源主機(jī)的MAC地址。如果目的主機(jī)和源主機(jī)地址不在同一個(gè)網(wǎng)絡(luò)中,源主機(jī)發(fā)送的IP數(shù)據(jù)包會送到交換機(jī)的默認(rèn)網(wǎng)關(guān),而默認(rèn)網(wǎng)關(guān)的MAC地址同樣可以通過ARP協(xié)議獲取。經(jīng)過ARP協(xié)議解析IP地址之后,主機(jī)會在緩存中保存IP地址和MAC地址的映射條目,此后再進(jìn)行數(shù)據(jù)交換只要從緩存中
7、讀取映射條目即可。2.4 ARP包的填充將命令行的參數(shù)作適當(dāng)?shù)霓D(zhuǎn)換后填到ARP分組結(jié)構(gòu)的個(gè)字段中即可。要注意的是,填充請求包時(shí),因?yàn)榘贓thernet上廣播,所以,物理幀頭的“目的MAC”字段要填充為FFFFFFFFFFFF;而ARP幀結(jié)構(gòu)中的目的MAC可填充任意值,因?yàn)樗藭r(shí)不起作用?!疤畛鋽?shù)據(jù)”字段要填充為0。3、 源程序核心函數(shù)說明#include<conio.h>#include<fstream.h>#include<iomanip.h>#include"pcap.h"#include<winsock2.h>#pr
8、agma comment(lib,"ws2_32.lib")#pragma comment(lib,"wpcap.lib")/定義ARP包數(shù)據(jù)struct arppktunsigned short hdtyp; /硬件類型unsigned short protyp; /協(xié)議類型unsigned char hdsize; /硬件地址長度unsigned char prosize; /協(xié)議地址長度unsigned short op; /(操作類型)操作值: ARP/RARPu_char smac6; /源MAC地址u_char sip4; /源IP地址u_c
9、har dmac6; /目的MAC地址u_char dip4; /目的IP地址;void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out) /從ARP包中找到頭部位置 arppkt* arph = (arppkt *)(pkt_data +14);/輸出源IP地址 for(int i=0;i<3;i+) out<<int(arph->sipi)<<'.' out.setf(ios:left); out<<setw(3)
10、<<int(arph->sip3)<<" " out.unsetf(ios:left);/輸出源MAC地址char oldfillchar=out.fill('0');out.setf(ios:uppercase); for(i=0;i<5;i+) out<<hex<<setw(2)<<int(arph->smaci)<<'-' out<<hex<<setw(2)<<int(arph->smac5)<<
11、;" " out.fill(oldfillchar); out.unsetf(ios:hex|ios:uppercase);/輸出目的IP地址 for(i=0;i<3;i+) out<<int(arph->dip3)<<'.'out.unsetf(ios:left);out<<setw(3)<<int(arph->dip3)<<' 'out.unsetf(ios:left);/輸出目的MAC地址out.fill('0');out.setf(ios:u
12、ppercase);for(i=0;i<5;i+) out<<hex<<setw(2)<<int(arph->dmaci)<<'-'out<<hex<<setw(2)<<int(arph->dmac5)<<" "out.fill(oldfillchar);out.unsetf(ios:hex|ios:uppercase);/輸出操作類型out<<ntohs(arph->op)<<" "/輸出操作時(shí)
13、間struct tm *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;void main(int argc,char *argv )/命令
14、行參數(shù)/檢查輸入命令格式if(argc!=2)cout<<"Please input command: ParseArp output_file"<<endl;return;/初始化網(wǎng)絡(luò)設(shè)備相關(guān)參數(shù)pcap_if_t *alldevs;pcap_if_t *d;pcap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;u_int netmask;char packet_filter="ether proto arp"struct bpf_program fcode;struct pcap_pkthd
15、r *header;const u_char *pkt_data;/獲取網(wǎng)絡(luò)設(shè)備列表if(pcap_findalldevs(&alldevs,errbuf)=-1)cout<<"Error in pcap_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<<"nU
16、nable to open the adapter."pcap_freealldevs(alldevs);return;/檢查數(shù)據(jù)鏈路是否為Ethernetif(pcap_datalink(adhandle)=DLT_EN10MB&&d->addresses!=NULL)break;if(d=NULL) cout<<"nNo interfaces found! Make sure Winpcap is installed.n" return;/獲得子網(wǎng)掩碼netmask=(sockaddr_in *)(d->addresse
17、s->netmask)->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(adhandle,&fcode)<0) cout<<&q
18、uot;nError setting the filter.n" pcap_freealldevs(alldevs); return;/顯示提示信息及每項(xiàng)含義cout<<"listening on "<<d->description<<"."<<endl<<endl;ofstream fout(argv1,ios:app); /日志記錄文件/為了查看日志時(shí)的方便,其中加入了日期記錄time_t t;time(&t);fout.seekp(0,ios:end);if(fou
19、t.tellp()!=0) fout<<endl;fout<<"ttARP request(1)/reply(2) on"<<ctime(&t);cout<<"Sour Ip Addr"<<" "<<"Sour MAC Address" <<" "<<"Des Ip Addr"<<" "<<"Des MAC Addres
20、s"<<" "<<"OP"<<" "<<"Time"<<endl;fout<<"Sour Ip Addr"<<" "<<"Sour MAC Address" <<" "<<"Des Ip Addr"<<" "<<"Des MAC Add
21、ress" <<" "<<"OP"<<" "<<"Time"<<endl;/釋放設(shè)備列表pcap_freealldevs(alldevs);/開始截獲ARP包int result;while(result=pcap_next_ex(adhandle,&header,&pkt_data)>=0) /循環(huán)解析ARP數(shù)據(jù)包 if(result=0) continue;/解析ARP包,結(jié)果輸出到屏幕與文件 packet_handle
22、r(header,pkt_data,cout); packet_handler(header,pkt_data,fout);4、 實(shí)驗(yàn)環(huán)境及平臺搭建操作系統(tǒng):windows 8運(yùn)行環(huán)境:Microsoft Visual C+ 6.0 開發(fā)包:wincap SDK,以及最新platform SDK的一些庫文件1. 把wincap SDK里面的庫文件以及l(fā)ib包含到源程序中,避免包含wincap頭文件時(shí)出現(xiàn)找不到頭文件的錯(cuò)誤具體方法:在菜單欄中->工具->選項(xiàng)>目錄,然后選擇include要包含的庫的路徑2. 下載最新platform SDK里面的部分庫文件strsafe.h,然
23、后添加到vc6.0安裝目錄里面的include文件夾里面,源程序需要用到這個(gè)頭文件,但是vc6.0里面沒有這個(gè)開發(fā)語言:C語言,C+5、 實(shí)驗(yàn)結(jié)果及分析實(shí)驗(yàn)結(jié)果:相關(guān)擴(kuò)展與分析:算法和代碼提示:調(diào)用socket()打開協(xié)議簇為PF_PACKET的原始套接字,這樣我們就可以收到數(shù)據(jù)鏈路幀:int fd = socket(PF_PACKET,SOCK_RAM,htons(ETH_P_ALL);對打開的套接字調(diào)用ioct1(),將網(wǎng)卡設(shè)置為混雜模式,這樣我們就可以接受到局域網(wǎng)中所有的包(包括目的地址不是本機(jī)的幀): struct ifreq req; memset (&req,0,sizeo
24、f(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,(struct sockaddr *)&from,&from_len);接收到包后,判斷是否為ARP包,若是ARP包則進(jìn)行處理,否則丟棄。If( (ntohs(eth_header->ether_type)=0x0806) &&(ntohs(arp_header-&g
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)直播活動(dòng)燈光租賃及現(xiàn)場監(jiān)督協(xié)議
- 家政公司老年看護(hù)與生活照料服務(wù)合同
- 母嬰護(hù)理品牌授權(quán)合作協(xié)議
- 跨境電商數(shù)據(jù)存儲備份及安全防護(hù)協(xié)議
- 抖音網(wǎng)絡(luò)直播股權(quán)分置及管理協(xié)議
- 花園相鄰權(quán)界定與土地交易合同
- 蔬菜大棚種植項(xiàng)目與農(nóng)業(yè)保險(xiǎn)合作協(xié)議
- 智能家居設(shè)備進(jìn)出口代理服務(wù)與智能家居解決方案合同
- 臨床輸血醫(yī)學(xué)檢驗(yàn)技術(shù)
- 《小貓咪和小兔子:動(dòng)物友誼教學(xué)課件》
- 鋼筋模板混凝土質(zhì)量培訓(xùn)課件
- 《給水排水管道工程施工及驗(yàn)收規(guī)范》-20210801081158
- 影視鑒賞智慧樹知到答案2024年南華大學(xué)
- 《Photoshop CC圖形圖像處理實(shí)例教程》全套教學(xué)課件
- 足療技師免責(zé)協(xié)議書
- 延長石油招聘筆試試題
- DB-T 29-22-2024 天津市住宅設(shè)計(jì)標(biāo)準(zhǔn)
- 老年期發(fā)育(人體發(fā)育學(xué))
- 術(shù)后吻合口瘺
- 建筑用砂石料采購 投標(biāo)方案(技術(shù)方案)
- 中華護(hù)理學(xué)會成人腸內(nèi)營養(yǎng)支持護(hù)理團(tuán)標(biāo)解讀
評論
0/150
提交評論