

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 計(jì)算機(jī)網(wǎng)絡(luò)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 題 目: 解析ARP數(shù)據(jù)包 </p><p> 姓 名: </p><p> 學(xué) 號(hào):
2、 </p><p> 同組姓名: </p><p> 專業(yè)班級(jí): </p><p> 指導(dǎo)教師: </p><p><b> 目 錄</b></p><p> 一、課程設(shè)計(jì)目的:2</p>&l
3、t;p> 二、課程設(shè)計(jì)要求:2</p><p> 三、課程設(shè)計(jì)分析3</p><p> 1.課程設(shè)計(jì)中的重點(diǎn)及難點(diǎn)3</p><p><b> 2.參考算法3</b></p><p><b> 3.核心代碼4</b></p><p> 四、源程序及
4、運(yùn)行截圖5</p><p><b> 五、心得體會(huì)9</b></p><p><b> 六、參考文獻(xiàn)10</b></p><p><b> 一、課程設(shè)計(jì)目的:</b></p><p> 本課程設(shè)計(jì)的目的是對(duì)網(wǎng)絡(luò)上的ARP數(shù)據(jù)包進(jìn)行解析,從而熟悉ARP數(shù)據(jù)包的結(jié)構(gòu),
5、對(duì)ARP協(xié)議有更好的理解和認(rèn)識(shí)。</p><p><b> 二、課程設(shè)計(jì)要求:</b></p><p> 通過編制程序,獲取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。</p><p> 程序的具體要求如下所示:</p><p> 1.以命令行的形式運(yùn)行,如下所示:<
6、/p><p> arpparse logfile</p><p> 其中,arpparse為程序名;logfile為日志文件名。</p><p> 2.程序輸出內(nèi)容如下所示:</p><p> 源IP地址 源MAC地址 目的IP地址 操作 時(shí)間</p><p> 各部分的說明如下所示:</p&
7、gt;<p> 源IP地址:輸出ARP消息格式中的源IP地址字段。</p><p> 源MAC地址:輸出ARP消息格式中的源物理地址字段。</p><p> 目的IP地址:輸出ARP消息格式中的目的IP地址字段。</p><p> 目的MAC地址:輸出ARP消息格式中的目的物理地址字段。</p><p> 操作:輸出A
8、RP消息格式中的操作字段,若為ARP請(qǐng)求,則為1,若為ARP應(yīng)答,則為2。</p><p> 時(shí)間:該ARP包產(chǎn)生的時(shí)間</p><p> 3.當(dāng)程序接收到鍵盤輸入Ctrl+C時(shí)退出。</p><p><b> 三、課程設(shè)計(jì)分析</b></p><p> 1.課程設(shè)計(jì)中的重點(diǎn)及難點(diǎn)</p><
9、p> 程序中會(huì)用到Winpcap,Winpcap是Win32環(huán)境下數(shù)據(jù)包捕獲的開放代碼函數(shù)庫?;赪inpcap的應(yīng)用程序一般按照下面幾個(gè)步驟進(jìn)行設(shè)計(jì):</p><p><b> 輸出網(wǎng)卡設(shè)備列表。</b></p><p><b> 選擇網(wǎng)卡并打開。</b></p><p> 捕獲數(shù)據(jù)包時(shí),可能需要設(shè)置過濾器
10、。</p><p> 捕獲數(shù)據(jù)包或者發(fā)送數(shù)據(jù)包。</p><p> 在程序設(shè)計(jì)過程中需要注意網(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á)形式??梢?/p>
11、利用函數(shù)ntohs()將網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換為主機(jī)字節(jié)序。</p><p> 選擇網(wǎng)卡并打開時(shí),注意選擇可用的網(wǎng)卡。</p><p><b> 2.參考算法</b></p><p> 取得當(dāng)前網(wǎng)卡設(shè)備列表。</p><p> 選擇Ethernet網(wǎng)卡并打開,注意判斷所選網(wǎng)卡是否為實(shí)際存在的可用網(wǎng)卡。</p>
12、<p> 設(shè)置過濾器,此處的過濾器正則表達(dá)式為“arp”或者“ether proto\\arp”。</p><p> 捕獲數(shù)據(jù)包并進(jìn)行處理(包括輸出各IP地址,物理地址,操作類型以及時(shí)間)。由于要記錄日志文件,為了便于輸出流參數(shù),建議采用pcap_next_ex()函數(shù)。</p><p><b> 流程圖如下圖所示:</b></p>
13、<p><b> 3.核心代碼</b></p><p><b> ARP數(shù)據(jù)包結(jié)構(gòu)</b></p><p> struct arppkt{ </p><p> unsigned short hdtyp; //硬件類型。值0001表示其為Ethernet</p>
14、<p> unsigned short protyp; //協(xié)議類型。值0800表示上層協(xié)議為IP</p><p> unsigned char hdsize; //硬件地址長(zhǎng)度。值為06</p><p> unsigned char prosize; //協(xié)議地址長(zhǎng)度。值為04</p><p> unsigned short op;
15、 //操作值為0001/0002,分別表示ARP請(qǐng)求/應(yīng)答</p><p> u_char smac[6]; //源MAC地址,6B</p><p> u_char sip[4]; //源IP地址,4B</p><p> u_char dmac[6]; //目的MAC地址</p><p
16、> u_char dip[4]; //目的IP地址</p><p><b> };</b></p><p> 獲取網(wǎng)絡(luò)設(shè)備列表,并以混雜模式打開網(wǎng)絡(luò)設(shè)備</p><p> //獲取網(wǎng)絡(luò)設(shè)備列表</p><p> if(pcap_findalldevs(&alldevs,errbu
17、f)==-1)</p><p><b> {</b></p><p> cout<<"Error in pcap_findalldevs:"<<errbuf;</p><p><b> return;</b></p><p><b> }
18、</b></p><p> //選擇Ethernet卡</p><p> for(d=alldevs;d;d=d->next)</p><p><b> { </b></p><p> //以混雜模式打開網(wǎng)卡,以接受所有的幀</p><p> if((adhandle=
19、pcap_open_live(d->name,1000,1,300,errbuf))==NULL)</p><p><b> {</b></p><p> cout<<"\nUnable to open the adapter.";</p><p> pcap_freealldevs(alldevs)
20、; //釋放設(shè)備列表</p><p><b> return;</b></p><p><b> }</b></p><p> if(pcap_datalink(adhandle)==DLT_EN10MB&&d->addresses!=NULL)</p><p>&
21、lt;b> break;</b></p><p><b> }</b></p><p> 編譯過濾器并設(shè)置過濾器,只捕獲ARP數(shù)據(jù)包</p><p> char packet_filter[]=”ether proto \\arp”; //過濾,選擇arp協(xié)議</p><p> if(p
22、cap_compile(adhandle,&fcode,packet_filter,1,netmask)<0)</p><p> { cout<<"\nUnable to compile the packet filter.Check the syntax.\n";</p><p> pcap_freealldevs(alldevs);
23、</p><p><b> return;</b></p><p><b> }</b></p><p><b> //設(shè)置過濾器</b></p><p> if(pcap_setfilter(adhandle,&fcode)<0)</p>
24、<p> { cout<<"\nError setting the filter.\n";</p><p> pcap_freealldevs(alldevs);</p><p><b> return;</b></p><p><b> }</b></p>
25、<p> 循環(huán)捕獲ARP包,并進(jìn)行解析</p><p> while((result=pcap_next_ex(adhandle,&header,&pkt_data))>=0)</p><p><b> {</b></p><p> 輸出ARP數(shù)據(jù)包的各個(gè)域的內(nèi)容到文件和屏幕上</p>
26、<p><b> }</b></p><p> 四、源程序及運(yùn)行截圖</p><p><b> 1.源程序如下:</b></p><p> #include<winsock2.h></p><p> #pragma comment(lib,"Ws2_32.l
27、ib") //用到ntobs()</p><p> //等同于點(diǎn)擊"project-setting-link"打開object/library module編輯框后加入文件</p><p> #pragma comment(lib,"wpcap.lib")</p><p> #include "pca
28、p.h" //此頭文件沒有包含在VC中,需要另外加入</p><p> #include<fstream.h></p><p> #include<iomanip.h> //格式化輸出需要用到</p><p> #include<conio.h> //用到_getch()</p>&l
29、t;p> //注意到接收的數(shù)據(jù)包頭中代表類型,數(shù)據(jù)長(zhǎng)度的字段采用的是big-endian</p><p> //所以對(duì)于2B/4B的數(shù)據(jù)要用ntohs()轉(zhuǎn)換為本機(jī)形式</p><p><b> //ARP包結(jié)構(gòu)</b></p><p> struct arppkt{ </p><p&
30、gt; unsigned short hdtyp; //硬件類型。值0001表示其為Ethernet</p><p> unsigned short protyp; //協(xié)議類型。值0800表示上層協(xié)議為IP</p><p> unsigned char hdsize; //硬件地址長(zhǎng)度。值為06</p><p> unsigned char p
31、rosize; //協(xié)議地址長(zhǎng)度。值為04</p><p> unsigned short op; //操作值為0001/0002,分別表示ARP請(qǐng)求/應(yīng)答</p><p> u_char smac[6]; //源MAC地址,6B</p><p> u_char sip[4]; //源IP地址,4B</p&g
32、t;<p> u_char dmac[6]; //目的MAC地址</p><p> u_char dip[4]; //目的IP地址</p><p><b> };</b></p><p> void packet_handler(const pcap_pkthdr *header,cons
33、t u_char *pkt_data,ostream& out);</p><p> void main(int argc,char *argv[ ])</p><p><b> {</b></p><p> if(argc!=2)</p><p><b> {</b></p&
34、gt;<p> cout<<"Usage:arpparse logfilename"<<endl;</p><p> cout<<"press any key to continue."<<endl;</p><p><b> _getch();</b><
35、/p><p><b> return;</b></p><p><b> }</b></p><p> pcap_if_t *alldevs;</p><p> pcap_if_t *d;</p><p> pcap_t *adhandle;</p>&l
36、t;p> char errbuf[PCAP_ERRBUF_SIZE];</p><p> u_int netmask;</p><p> char packet_filter[]="ether proto \\arp";</p><p> struct bpf_program fcode;</p><p>
37、 struct pcap_pkthdr *header;</p><p> const u_char *pkt_data;</p><p> if(pcap_findalldevs(&alldevs,errbuf)==-1)</p><p><b> {</b></p><p> cout<<
38、"Error in pcap_findalldevs:"<<errbuf;</p><p><b> return;</b></p><p><b> }</b></p><p> for(d=alldevs;d;d=d->next)</p><p>&l
39、t;b> { </b></p><p> if((adhandle=pcap_open_live(d->name,1000,1,300,errbuf))==NULL)</p><p><b> {</b></p><p> cout<<"\nUnable to open the adapte
40、r.";</p><p> pcap_freealldevs(alldevs);</p><p><b> return;</b></p><p><b> }</b></p><p> if(pcap_datalink(adhandle)==DLT_EN10MB&&
41、;d->addressess!=NULL)</p><p><b> break;</b></p><p><b> }</b></p><p> if(d==NULL)</p><p><b> {</b></p><p> cout&
42、lt;<"\nNo interfaces found! Make sure Winpcap is installed.\n";</p><p><b> return;</b></p><p><b> }</b></p><p><b> //獲得子網(wǎng)掩碼</b>&l
43、t;/p><p> netmask=((sockaddr_in *)(d->netmask))->sin_addr.s_un.s_addr;</p><p> //編譯過濾器,只捕獲ARP包</p><p> if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0)</p
44、><p> { cout<<"\nUnable to compile the packet filter.Check the syntax.\n";</p><p> pcap_freealldevs(alldevs);</p><p><b> return;</b></p><p&g
45、t;<b> }</b></p><p><b> //設(shè)置過濾器</b></p><p> if(pcap_setfilter(ashandle,&fcode)<0)</p><p> { cout<<"\nError setting the filter.\n"
46、;</p><p> pcap_freealldevs(alldevs);</p><p><b> return;</b></p><p><b> }</b></p><p> cout<<"\t\tlistening on "<<d->
47、description<<"..."<<endl<<endl;</p><p> //顯示提示信息及每項(xiàng)含義</p><p> ofstream fout(argv[1],ios::app); //日志記錄文件</p><p> //為了查看日志時(shí)的方便,其中加入了日期記錄</p>&l
48、t;p><b> time_t t;</b></p><p><b> time(&t);</b></p><p> fout.seekp(0,ios::end);</p><p> if(fout.tellp()!=0)</p><p> fout<<endl;
49、</p><p> fout<<"\t\tARP request(1)/reply(2) on"<<ctime(&t);</p><p> cout<<Sour Ip Addr"<<" "<<"Sour MAC Address"</p>
50、<p> <<" "<<"Des Ip Addr"<<" "<<"Des MAC Address"</p><p> <<" "<<"OP"<<" "<
51、<"Time"<<endl;</p><p> fout<<Sour Ip Addr"<<" "<<"Sour MAC Address"</p><p> <<" "<<"Des Ip Addr"
52、;<<" "<<"Des MAC Address"</p><p> <<" "<<"OP"<<" "<<"Time"<<endl;</p><p><b> /
53、/釋放設(shè)備列表</b></p><p> pcap_freealldevs(alldevs);</p><p> int result;</p><p> while((result=pcap_next_ex(adhandle,&header,&pkt_data))>=0)</p><p><b&
54、gt; { </b></p><p> if(result==0)</p><p><b> continue;</b></p><p> packer_handler(header,pkt_data,cout);</p><p> packet_handler(header,pkt_data,
55、fout);</p><p><b> }</b></p><p><b> }</b></p><p> void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out)</p><p&g
56、t;<b> {</b></p><p> arpkt* arph = (arppkt *)(pkt_data +14);</p><p> for(int i=0;i<3;i++)</p><p> out<<int(arph->sip[i])<<'.';</p>&l
57、t;p> out.setf(ios::left);</p><p> out<<setw(3)<<int(arph->sip[3])<<" ";</p><p> out.unsetf(ios::uppercase);</p><p> for(i=0;i<5;i++)</p&
58、gt;<p> out<<hex<<setw(2)<<int(arph->smac[i])<<'-';</p><p> out<<hex<<setw(2)<<int(arph->smac[5])<<" ";</p><p>
59、 out.fill(oldfillchar);</p><p> out.unsetf(ios::hex|ios::uppercase);</p><p> for(i=0;i<3;i++)</p><p> out<<int(arph->dip[3])<<'.';</p><p>
60、 out.unsetf(ios::left);</p><p> //輸出目的MAC地址</p><p> out.fill('0');</p><p> out.setf(ios::uppercase);</p><p> for(i=0;i<5;i++)</p><p> out&l
61、t;<hex<<setw(2)<<int(arph->dmac[i])<<'-';</p><p> out.fill(oldfillchar);</p><p> out.unsetf(ios::hex|ios::uppercase);</p><p> out<<ntohs(arp
62、h->op)<<" ";</p><p> struct tm *ltime;</p><p> ltime=localtime(&header->ts.tv_sec);</p><p> out.fill('0');</p><p> out<<lt
63、ime->tm_hour<<':'<<setw(2)<<ltime->tm_min<<':'<<setw(2)<<ltime->tm_sec;</p><p> out.fill(oldfillchar);</p><p> out<<endl;<
64、/p><p><b> }</b></p><p><b> 2.運(yùn)行截圖如下:</b></p><p><b> 五、心得體會(huì)</b></p><p> 本次課程設(shè)計(jì),完成了在xp環(huán)境下的解析ARP數(shù)據(jù)包。</p><p> 在具體實(shí)現(xiàn)獲取網(wǎng)絡(luò)中
65、的ARP數(shù)據(jù)包解析數(shù)據(jù)包的內(nèi)容,并將其寫入日志文件的過程中,使我更加清楚物理地址、IP地址的關(guān)聯(lián),源地址與目的地址的關(guān)系,以及二者對(duì)數(shù)據(jù)類型的格式要求。最重要的是通過這次的實(shí)際訓(xùn)練讓我對(duì)ARP協(xié)議更加理解。</p><p> 通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立
66、思考的能力。在設(shè)計(jì)的過程中遇到問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計(jì)之后,一定把以前所學(xué)過的知識(shí)重新溫故才行。</p><p> 課程設(shè)計(jì)是培養(yǎng)我們綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn)、提出、分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)我們實(shí)際工作能力的具體訓(xùn)練和考察過程。隨著科學(xué)技術(shù)發(fā)展的日新月異,網(wǎng)絡(luò)已經(jīng)成為當(dāng)今計(jì)算機(jī)發(fā)展中空前活躍的領(lǐng)域,在生
67、活中可以說是無處不在,因此作為二十一世紀(jì)的計(jì)算機(jī)專業(yè)的大學(xué)生來說掌握網(wǎng)絡(luò)組網(wǎng)技術(shù)是十分重要的。</p><p><b> 六、參考文獻(xiàn)</b></p><p> 【1】謝希人著. 計(jì)算機(jī)網(wǎng)絡(luò)(第四版)大連理工大學(xué)出版社2003</p><p> 【2】宋凱等著. 計(jì)算機(jī)網(wǎng)絡(luò). 北京:清華大學(xué)出版社 2010</p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-- 解析ip數(shù)據(jù)包
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---ip數(shù)據(jù)包解析報(bào)告
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)tcp數(shù)據(jù)包
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---網(wǎng)絡(luò)協(xié)議數(shù)據(jù)包
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---監(jiān)控ip數(shù)據(jù)包流量
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---基于wireshark的網(wǎng)絡(luò)數(shù)據(jù)包內(nèi)容解析
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--數(shù)據(jù)包發(fā)送和接受程序的實(shí)現(xiàn)
- 解析arp數(shù)據(jù)包課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 《計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)》
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-監(jiān)控ip包流量
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---網(wǎng)絡(luò)設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論