




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE1實(shí)驗(yàn)報(bào)告課程名稱 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì) 報(bào)告名稱 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告班級 物聯(lián)11 學(xué)號 姓名 課題一:發(fā)送ARP數(shù)據(jù)包1、實(shí)驗(yàn)?zāi)康暮鸵?.1實(shí)驗(yàn)?zāi)康模?)熟悉ARP協(xié)議的原理;(2)熟悉ARP協(xié)議的分組結(jié)構(gòu);(3)熟悉WinCap中的Packet編程;(4)熟悉截包軟件的使用。1.2實(shí)驗(yàn)要求編寫程序,構(gòu)造ARP包,選擇并打開網(wǎng)卡,將ARP包發(fā)送出去并用截包軟件驗(yàn)證。(1)程序使用VisualC++編寫,可建立Win32ConsoleApplication工程;(2)程序用命令行方式使用,命令行要求有6個(gè)參數(shù),可按如下命令方式使用:程序名源IP源MAC目標(biāo)IP目標(biāo)MAC標(biāo)志網(wǎng)卡號其中標(biāo)志參數(shù):1表示請求,2表示應(yīng)答。(3)在ARP填充數(shù)據(jù)字段填入自己的姓名的拼音;(4)用安裝的截包軟件能夠捕獲到本程序發(fā)出的ARP包。2、實(shí)驗(yàn)環(huán)境2.1硬件環(huán)境PC機(jī)一臺2.2軟件環(huán)境操作系統(tǒng):WindowsXP開發(fā)語音:C、C++運(yùn)行環(huán)境:MicrosoftVisualC++6.0函數(shù)庫:WinPcap4.0.1(Packet.dll)截包軟件:Ethereal程序邏輯框圖程序源代碼#include<stdafx.h>#include<iostream.h>#include<fstream.h>#include<conio.h>#include<stdio.h>#include<stdlib.h>#include"Packet32.h"#include"Ntddndis.h"#include<string.h>#pragmacomment(lib,"Packet.lib")#pragmacomment(lib,"ws2_32.lib")//DLC頭typedefstructDLCHeader{unsignedcharDesMAC[6];unsignedcharSrcMAC[6];unsignedshortEthertype;}DLCHEADER;//ARP楨typedefstructARPFrame{unsignedshortHW_Type;unsignedshortProt_Type;unsignedcharHW_Addr_Len;unsignedcharProt_Addr_Len;unsignedshortFlag;//1=request,2=responseunsignedcharSend_HW_Addr[6];unsignedcharSend_Prot_Addr[4];unsignedcharTarg_HW_Addr[6];unsignedcharTarg_Prot_Addr[4];unsignedcharpadding[18];}ARPFRAME;//ARP包=DLC頭+ARP楨typedefstructARPPacket{DLCHeaderdlcHeader;ARPFramearpFrame;}*PARPPACKET;ARPPacketARPPACKET;inttransIP(char*,unsignedchar*);inttransMAC(char*,unsignedchar*);LPADAPTERlpAdapter;LPPACKETlpPacket;boolSend();voidmain(intargc,char*argv[]){if(argc!=6){cout<<"輸入格式錯(cuò)誤"<<endl;return;}inti=0;memset(&ARPPACKET,0,sizeof(ARPPACKET));if(*argv[5]=='0'){for(i=0;i<6;i++)ARPPACKET.dlcHeader.DesMAC[i]=0xff;ARPPACKET.arpFrame.Flag=(unsignedshort)0x0100;}else{if(*argv[5]=='1'){//填充DLC頭中目的MAC地址if(!transMAC(argv[4],ARPPACKET.dlcHeader.DesMAC))return;//ARP楨中flag位置2ARPPACKET.arpFrame.Flag=(unsignedshort)0x0200;}elsecout<<"flag位輸入錯(cuò)誤"<<endl;}if(!transMAC(argv[2],ARPPACKET.dlcHeader.SrcMAC))return;//填充DLC頭中楨類型ARPPACKET.dlcHeader.Ethertype=htons((unsignedshort)0x0806);ARPPACKET.arpFrame.HW_Type=(unsignedshort)0x0100;//(Ethernet類型)ARPPACKET.arpFrame.Prot_Type=(unsignedshort)0x0008;ARPPACKET.arpFrame.HW_Addr_Len=(unsignedchar)6;ARPPACKET.arpFrame.Prot_Addr_Len=(unsignedchar)4;if(!transMAC(argv[2],ARPPACKET.arpFrame.Send_HW_Addr))return;if(!transIP(argv[1],ARPPACKET.arpFrame.Send_Prot_Addr))return;if(!transMAC(argv[4],ARPPACKET.arpFrame.Targ_HW_Addr))return;if(!transIP(argv[3],ARPPACKET.arpFrame.Targ_Prot_Addr))return;for(i=3;i<18;i++)ARPPACKET.arpFrame.padding[i]=0;ARPPACKET.arpFrame.padding[0]='w';ARPPACKET.arpFrame.padding[1]='a';ARPPACKET.arpFrame.padding[2]='n';ARPPACKET.arpFrame.padding[3]='g';ARPPACKET.arpFrame.padding[4]='j';ARPPACKET.arpFrame.padding[5]='i';ARPPACKET.arpFrame.padding[6]='n';ARPPACKET.arpFrame.padding[7]='q';ARPPACKET.arpFrame.padding[8]='u';ARPPACKET.arpFrame.padding[9]='a';ARPPACKET.arpFrame.padding[10]='n';if(!Send())cout<<"發(fā)送arp包失敗"<<endl;}inttransIP(char*argv,unsignedchar*a){charip[16];inti=0,j=0,k=0;strcpy(ip,argv);intm=strlen(argv);for(i=0;i<m;i++)//判斷命令行輸入的IP格式是否正確{if((ip[i]<'0'||ip[i]>'9')&&ip[i]!='.'){cout<<"輸入ip:"<<argv<<"格式錯(cuò)誤"<<endl;return0;}else{if(ip[i]!='.')j++;else{k++;if(j>3){cout<<"輸入ip:"<<argv<<"格式錯(cuò)誤"<<endl;return0;}else{j=0;}if(k>3){cout<<"輸入ip:"<<argv<<"格式錯(cuò)誤"<<endl;return0;}}}}j=0;for(i=0;i<4;i++)//填充IP地址{while(*(ip+j)<'0'||*(ip+j)>'9')j++;a[i]=(unsignedchar)atoi(ip+j);while(*(ip+j)>='0'&&*(ip+j)<='9')j++;}return1;}inttransMAC(char*argv,unsignedchar*b){charmac[18];inti=0,j=0,k=0;strcpy(mac,argv);intm=strlen(argv);for(i=0;i<m;i++)//判斷命令行輸入的MAC地址是否正確{if(mac[i]<'0'||(mac[i]>':'&&mac[i]<'A')||(mac[i]>'Z'&&mac[i]<'a')||mac[i]>'Z'){cout<<"輸入mac:"<<argv<<"格式錯(cuò)誤"<<endl;return0;}else{if(mac[i]!=':')j++;else{k++;if(j>2){cout<<"輸入mac"<<argv<<"格式錯(cuò)誤"<<endl;return0;}else{j=0;}if(k>5){cout<<"輸入mac"<<argv<<"格式錯(cuò)誤"<<endl;return0;}}}}j=0;for(i=0;i<6;i++)//填充MAC地址{ while(*(mac+j)==':'||*(mac+j)=='-')j++;if(*(mac+j)>='0'&&*(mac+j)<='9')b[i]=(unsignedchar)(*(mac+j)-'0');if(*(mac+j)>='a'&&*(mac+j)<='z')b[i]=(unsignedchar)(*(mac+j)-'a'+10);if(*(mac+j)>='A'&&*(mac+j)<='z')b[i]=(unsignedchar)(*(mac+j)-'A'+10);j++;b[i]*=16;if(*(mac+j)>='0'&&*(mac+j)<='9')b[i]+=(unsignedchar)(*(mac+j)-'0');if(*(mac+j)>='a'&&*(mac+j)<='z')b[i]+=(unsignedchar)(*(mac+j)-'a'+10);if(*(mac+j)>='A'&&*(mac+j)<='z')b[i]+=(unsignedchar)(*(mac+j)-'A'+10);j++;}return1;}boolSend(){charAdapterNameA[8192];charAdapterNameU[2*sizeof(AdapterNameA)];unsignedlongAdapterAlength=sizeof(AdapterNameA);unsignedlongAdapterUlength=2*sizeof(AdapterNameA);DWORDdwVersion=GetVersion();DWORDdwWindowsMajorVersion=(DWORD)(LOBYTE(LOWORD(dwVersion)));if(!(dwVersion>=0x80000000&&dwWindowsMajorVersion>=4)){//WindowsNT//獲取UNICODE碼網(wǎng)卡名列表if(PacketGetAdapterNames(AdapterNameU,&AdapterUlength)==FALSE){cout<<"cannotgetadapterlist"<<endl;returnFALSE;}//將第一個(gè)網(wǎng)卡名轉(zhuǎn)為ASCII碼unsignedshort*pAdapterName=(unsignedshort*)AdapterNameU;for(unsignedi=0;i<AdapterAlength;i++)if((AdapterNameA[i]=(char)pAdapterName[i])=='\0')break;}else{//Windows9x//獲取ASCII碼網(wǎng)卡名列表if(PacketGetAdapterNames(AdapterNameA,&AdapterAlength)==FALSE){cout<<"cannotgetadapterlist"<<endl;returnFALSE;}}inti; for(i=1;i<8000;i++)AdapterNameA[i]=AdapterNameU[i+33];lpAdapter=PacketOpenAdapter(AdapterNameA);if(!lpAdapter||lpAdapter->hFile==INVALID_HANDLE_VALUE){cout<<"Cannotopenadapter.errorcode:"<<GetLastError()<<endl;returnFALSE;}//發(fā)送包:LPPACKETlpPacket;//定義發(fā)送包指針if((lpPacket=PacketAllocatePacket())!=NULL){//初始化發(fā)送包結(jié)構(gòu)PacketInitPacket(lpPacket,&ARPPACKET,sizeof(ARPPACKET));//每次只發(fā)送一個(gè)包PacketSetNumWrites(lpAdapter,1);//發(fā)送包if(PacketSendPacket(lpAdapter,lpPacket,true)==1){cout<<"Sendsuccessfully"<<endl;}else{cout<<"Sendfail"<<endl;PacketFreePacket(lpPacket);//釋放發(fā)送包結(jié)構(gòu)}}else{cout<<"FailedallocatingLPPACKET"<<endl;}PacketCloseAdapter(lpAdapter);returnTRUE;}實(shí)驗(yàn)數(shù)據(jù)、結(jié)果分析打開Ethereal進(jìn)行抓包,然后調(diào)試程序,運(yùn)行成功。本機(jī)IP:37MAC地址:88:51:FB:6F:0A:A1ARP請求打開程序,設(shè)置程序變量為3788:51:FB:6F:0A:A103FF:FF:FF:FF:FF:FF0截圖如下:ARP應(yīng)答向教師機(jī)發(fā)送請求后收到應(yīng)答,截圖如下6、總結(jié)通過此次實(shí)驗(yàn),讓我們重新溫習(xí)了使用VC++6.0進(jìn)行編程的流程,提高了我們用C語言進(jìn)行編程的能力。以前對于ARP的認(rèn)識僅僅停留在課本知識的層次,這次的實(shí)際操作,加深了我們對于ARP包的了解,對ARP協(xié)議幀結(jié)構(gòu)和它的工作原理有了更深的認(rèn)識。通過實(shí)驗(yàn),我們也了解了WinPcap中一些數(shù)據(jù)結(jié)構(gòu)和函數(shù)說明,并且學(xué)會(huì)了如何使用Ethereal進(jìn)行抓包,并在其中篩選出想要的結(jié)果。此外,通過這次實(shí)驗(yàn),也鍛煉了我們的思考能力和合作能力。在編程的過程中,遇到了很多的困難,只有靜下心來,仔細(xì)思考,逐步調(diào)試,才能找出代碼存在的問題。有的問題很棘手,自己難以解決,通過和同學(xué)們互相討論,加強(qiáng)了合作能力,也促進(jìn)了問題的解決。同時(shí),特別感謝老師在實(shí)驗(yàn)過程中的悉心指導(dǎo)。課題二:解析ARP與IP數(shù)據(jù)包1、實(shí)驗(yàn)?zāi)康暮鸵?.1、實(shí)驗(yàn)?zāi)康模?)熟悉ARP與IP協(xié)議的原理;(2)熟悉ARP與IP協(xié)議的分組結(jié)構(gòu),對網(wǎng)絡(luò)協(xié)議有更好的理解與認(rèn)識;(3)熟悉WinCap編程;1.2、實(shí)驗(yàn)要求編寫程序,獲取網(wǎng)絡(luò)中的ARP包和IP包,解析數(shù)據(jù)包的內(nèi)容,顯示各包的主要字段和接收時(shí)間。(1)程序使用VisualC++編寫,可建立Win32ConsoleApplication工程;(2)程序用命令行方式使用,命令行要求有1個(gè)參數(shù),可按如下命令方式使用:程序名網(wǎng)卡號(3)程序輸出的內(nèi)容可參考如下格式:SourceIPSourceMac/HeadLenDestIPDestMac/TotalLenFlag/ProtocolTimeType其中,F(xiàn)lag是對ARP而言的(1為請求,2為應(yīng)答);Type表示包的類型(ARP或IP,或者用代碼表示);HeadLen、TotalLen和Protocol是對IP而言的。(4)程序接收到鍵盤輸入Ctrl+C時(shí)退出。2、實(shí)驗(yàn)環(huán)境2.1硬件環(huán)境PC機(jī)一臺2.2軟件環(huán)境操作系統(tǒng):WindowsXP開發(fā)語音:C、C++運(yùn)行環(huán)境:MicrosoftVisualC++6.0函數(shù)庫:WinPcap4.0.1(Packet.dll)截包軟件:Ethereal3、程序邏輯框圖4、程序源代碼#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;//硬件地址長度 unsignedcharprosize;//協(xié)議地址長度 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[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)<<""; //輸出操作時(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ù){ //初始化網(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;//編譯過濾器,只捕獲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
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAQI 092-2019食用豌豆纖維
- T/CAPMA 4-2018熟水貂皮質(zhì)量檢驗(yàn)
- 城市配送面試題及答案
- 德國設(shè)計(jì)面試題及答案
- 一線互聯(lián)網(wǎng)公司java面試題及答案
- 健康顧問面試題及答案
- 技術(shù)保障考試題及答案
- 公司招人面試題庫及答案
- 無頂冠狀靜脈竇綜合征的臨床護(hù)理
- 人生課件介紹
- 《現(xiàn)代漢語》課件-句型與句式
- 齊魯文化(齊魯師范學(xué)院)知到智慧樹章節(jié)答案
- 2024年公務(wù)員考試:視頻培訓(xùn)課程報(bào)名指南
- 三年級語文下冊期末復(fù)習(xí)九大專項(xiàng)
- 人教版小學(xué)四年級數(shù)學(xué)下冊課后練習(xí)試題大全
- 2025年人教版生物中考總復(fù)習(xí)知識網(wǎng)絡(luò)提綱
- 心肺復(fù)蘇試題及答案
- 地坪漆售后服務(wù)措施
- 2025年九省聯(lián)考新高考 英語試卷(含答案解析)
- 《Python程序設(shè)計(jì)基礎(chǔ)教程(微課版)》全套教學(xué)課件
- 鹽堿地質(zhì)量等級評價(jià)技術(shù)規(guī)程
評論
0/150
提交評論