




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄一 課程設(shè)計(jì)目的1二 課程設(shè)計(jì)要求1三 系統(tǒng)開發(fā)語言及環(huán)境的選擇1四 相關(guān)知識(shí) 1-31ARP協(xié)議的工作原理1-22.ARP的包格式 23.ARP包的填充2-3五 課程設(shè)計(jì)過程3-111.流程圖 3-42.源程序代碼 4-103.程序運(yùn)行結(jié)果分析10-11六 課程設(shè)計(jì)小結(jié)11七 參考文獻(xiàn)11-12一 課程設(shè)計(jì)目的 1) ARP協(xié)議用于完成IP地址與MAC地址間的轉(zhuǎn)換。2) 熟悉ARP協(xié)議對(duì)于IP數(shù)據(jù)包的傳輸過程具有重要意義。3) 本課程設(shè)計(jì)的主要目的是通過封裝與發(fā)送ARP幀,了解ARP協(xié)議的工作原理與ARP幀的結(jié)構(gòu)。二 課程設(shè)計(jì)要求根據(jù)后面介紹的ARP包結(jié)構(gòu),編寫程序封裝并發(fā)送ARP包。1
2、) 以命令行形式運(yùn)行: arpsend src_ip src_mac dst_ip dst_mac flag其中arpsend作為程序名。各參數(shù)意義:src_ip: 源IP地址。src_mac: 源MAC地址。dst_ip: 目的IP地址。dst_mac: 目的MAC地址。Flag:0表示ARP請(qǐng)求;1表示ARP應(yīng)答。例如: Arpsend FA:01:02:03:04:05 0D:E1:02:03:B4:06 12) 輸出內(nèi)容:ARP幀的各字?jǐn)?shù)值,包括源IP地址,源MAC地址,目的IP地址,目的MAC地址等。三 系統(tǒng)開發(fā)語言及環(huán)境的選擇操作系統(tǒng)
3、:Windows XP運(yùn)行環(huán)境:Microsoft Visual C+ 6.0開發(fā)語言:C語言,C+等四 相關(guān)知識(shí) 1.ARP協(xié)議的工作原理 Ethernet 設(shè)備(比如網(wǎng)卡)有自己全球唯一的MAC地址,它們以MAC地址來傳輸Ethernet數(shù)據(jù)包,但他們卻不能識(shí)別IP包的IP地址。所以,在Ethernet中進(jìn)行IP通信時(shí)就需要一個(gè)協(xié)議來建立IP地址和MAC地址的對(duì)應(yīng)關(guān)系,這個(gè)協(xié)議就是ARP協(xié)議。 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識(shí)別出自己的I
4、P地址,發(fā)送給應(yīng)答報(bào)文,告訴A自己的物理地址。但是,所有的源節(jié)結(jié)點(diǎn)在發(fā)送任何一個(gè)分組或者連續(xù)向同一個(gè)目的主機(jī)發(fā)送分組時(shí),都要通過ARP服務(wù)去獲取目的物理地址,他的工作效率肯定很低。為了克服這個(gè)缺點(diǎn),要對(duì)ARP做些改進(jìn)。ARP改進(jìn)的一個(gè)重要方法是,在使用ARP的主機(jī)上保留一個(gè)專用的高速緩存,用于存放最近的IP地址和物理地址的綁定,在發(fā)送ARP請(qǐng)求時(shí)先看看這個(gè)高速緩存。例如,在命令窗口中輸入:arp-a 得到: Internet Address Physical Address Type50 00-30-6e-07-e6-de dynamic 這就是該計(jì)算機(jī)里存儲(chǔ)的IP地址與
5、MAC地址的對(duì)應(yīng)關(guān)系,dynamic表示臨時(shí)存儲(chǔ)在ARP緩存中的條目,過一段時(shí)間系統(tǒng)就會(huì)自動(dòng)刪除。 這樣,當(dāng)計(jì)算機(jī)要和另一臺(tái)計(jì)算機(jī)9通信時(shí),他會(huì)先檢查ARP緩存,查找是否與9對(duì)應(yīng)的ARP條目。如果沒找到,他就會(huì)發(fā)送ARP請(qǐng)求包,廣播詢問與9對(duì)應(yīng)的MAC地址。9發(fā)現(xiàn)ARP請(qǐng)求包中的IP一樣,就會(huì)發(fā)送ARP應(yīng)答分組,通知自己IP地址與MAC地址的對(duì)應(yīng)關(guān)系。于是,計(jì)算機(jī)的ARP緩存就會(huì)相應(yīng)刷新,增加以下信息:9 00-40-05-42-84-f4 dynamic 。 2.ARP的包格式圖1給
6、了ARP分組格式的示意圖。物理幀頭(14B)ARP幀結(jié)構(gòu)(28B)填充數(shù)據(jù)(18B)CRC(4B)圖1 ARP包格式(1) 物理幀頭物理幀頭的結(jié)構(gòu)如2圖所示。目的MAC (6B)源MAC(6B) 類型(2B) ARP幀:0x0806圖2 物理幀頭格式(2)ARP幀結(jié)構(gòu) 圖3給出了ARP幀格式的示意圖,長(zhǎng)度為28B。 3ARP包的填充 要注意的是,填充請(qǐng)求包時(shí)。因?yàn)榘贓thernet上廣播,所以,物理幀頭的“目的MAC”字段要填充為FFFFFFFFFFFF;而ARP幀結(jié)構(gòu)中的目的MAC可填充為任意值,因?yàn)樗藭r(shí)不起作用。“填充數(shù)據(jù)”字段要填充為0。 0 8 16 24 31(位) 硬件類型(
7、Ethernet:0x1) 上層協(xié)議類型(IP:0x0800)硬件地址長(zhǎng)度(0x6)IP地址長(zhǎng)度(0x4) 操作(請(qǐng)求: 0x1; 應(yīng)答: 0x2) 源MAC地址 源MAC地址 源IP地址 源IP地址 目的MAC地址 目的MAC地址 目的IP地址圖3 ARP幀結(jié)構(gòu)五 課程設(shè)計(jì)過程 1.流程圖NNNYNYARP請(qǐng)求,填充DLC頭中目的MAC(廣播,全F)及FlagFlag=0?N開始YYY結(jié)束關(guān)閉網(wǎng)卡 釋放包結(jié)構(gòu)發(fā)送包成功?分配及初始化發(fā)送包結(jié)構(gòu)選擇網(wǎng)卡并打開?獲取網(wǎng)卡列表?進(jìn)入發(fā)送ARP包函數(shù)填充DLC的其他字段及ARP頭的各字段ARP請(qǐng)求,填充DLC頭中目的MAC及Flag定義ARP包結(jié)構(gòu)并
8、初始化命令行參數(shù) = 6? 圖5 程序流程圖2.源程序代碼頭文件keshe.h#include <iostream.h>#include <fstream.h>#include <stdlib.h>#include <conio.h>#include <stdio.h>#include "Packet32.h"#include "Ntddndis.h"#pragma comment(lib,"Packet.lib")/ DLC頭typedef struct DLCHeader
9、 unsigned char DesMAC6;/目的MAC地址 unsigned char SrcMAC6;/源MAC地址 unsigned short Ethertype;/幀類型DLCHEADER;/ ARP楨typedef struct ARPFrame unsigned short HW_Type;/硬件類型 unsigned short Prot_Type;/上層協(xié)議類型 unsigned char HW_Addr_Len;/MAC地址長(zhǎng)度 unsigned char Prot_Addr_Len;/IP地址長(zhǎng)度 unsigned short Flag;/1表示請(qǐng)求,2表示應(yīng)答 uns
10、igned char Send_HW_Addr6;/源MAC地址 unsigned char Send_Prot_Addr4;/源IP地址 unsigned char Targ_HW_Addr6;/目的MAC地址 unsigned char Targ_Prot_Addr4;/目的IP地址 unsigned char padding18;/填充數(shù)據(jù)ARPFRAME;/ ARP包=DLC頭+ARP楨typedef struct ARPPacket DLCHEADER dlcHeader; ARPFRAME arpFrame;*PARPPACKET;ARPPacket ARPPACKET;源文件 k
11、eshe.cpp#include<iostream.h>#include<string.h>#include "keshe.h"int transIP(char *,unsigned char *);/填充IP地址int transMAC(char *,unsigned char *);/填充MAC地址LPADAPTER lpAdapter;/網(wǎng)卡結(jié)構(gòu)指針LPPACKET lpPacket;/接收包結(jié)構(gòu)指針bool Send();/發(fā)送包函數(shù)void main(int argc,char *argv)if(argc!=6)/命令行參數(shù)!=6,輸入錯(cuò)誤
12、cout<<"輸入格式錯(cuò)誤"<<endl;return;int i=0;memset(&ARPPACKET, 0, sizeof(ARPPACKET);/初始化ARP包if(*argv5='0')/輸入flag參數(shù)為0,ARP請(qǐng)求for(i=0;i<6;i+)/DLC頭中目的MAC地址為廣播形式ARPPACKET.dlcHeader.DesMACi=0xff;ARPPACKET.arpFrame.Flag=(unsigned short)1;/ARP幀中flag位置1elseif(*argv5='1')/
13、輸入flag參數(shù)為1,ARP響應(yīng)/填充DLC頭中目的MAC地址if(!transMAC(argv4,ARPPACKET.dlcHeader.DesMAC)return;/ARP楨中flag位置2ARPPACKET.arpFrame.Flag=(unsigned short)0x0200;elsecout<<"flag位輸入錯(cuò)誤"<<endl;if(!transMAC(argv2,ARPPACKET.dlcHeader.SrcMAC)/填充DLC頭中源MAC地址return;/填充DLC頭中楨類型ARPPACKET.dlcHeader.Ethertyp
14、e=htons(unsigned short)0x0806);ARPPACKET.arpFrame.HW_Type=(unsigned short)0x0100;/ARP頭中硬件類型/(Ethernet類型)ARPPACKET.arpFrame.Prot_Type=(unsigned short)0x0008;/上層協(xié)議(IP)類型ARPPACKET.arpFrame.HW_Addr_Len=(unsigned char)6;/MAC地址長(zhǎng)度ARPPACKET.arpFrame.Prot_Addr_Len=(unsigned char)4;/IP地址長(zhǎng)度if(!transMAC(argv2,A
15、RPPACKET.arpFrame.Send_HW_Addr)/源MAC地址return;if(!transIP(argv1,ARPPACKET.arpFrame.Send_Prot_Addr)/源IP地址return;if(!transMAC(argv4,ARPPACKET.arpFrame.Targ_HW_Addr)/目的MAC地址return;if(!transIP(argv3,ARPPACKET.arpFrame.Targ_Prot_Addr)/目的IP地址return;for(i=0;i<18;i+)ARPPACKET.arpFrame.paddingi=0;/填充數(shù)據(jù)if(!
16、Send()cout<<"發(fā)送arp包失敗"<<endl;/發(fā)送ARP包int transIP(char *argv,unsigned char *a)char ip16;int i=0,j=0,k=0;strcpy(ip,argv);int m=strlen(argv);for(i=0;i<m;i+) /判斷命令行輸入的IP格式是否正確if(ipi<'0'|ipi>'9')&&ipi!='.')cout<<"輸入ip:"<<
17、argv<<"格式錯(cuò)誤"<<endl;return 0;elseif(ipi!='.')j+;elsek+;if(j>3)cout<<"輸入ip:"<<argv<<"格式錯(cuò)誤"<<endl;return 0;elsej=0;if(k>3)cout<<"輸入ip:"<<argv<<"格式錯(cuò)誤"<<endl;return 0;j=0;for(i=0;i&
18、lt;4;i+) /填充IP地址while(*(ip+j)<'0'|*(ip+j)>'9')j+;ai=(unsigned char)atoi(ip+j);while(*(ip+j)>='0'&&*(ip+j)<='9')j+;return 1;int transMAC(char *argv,unsigned char *b)char mac18;int i=0,j=0,k=0;strcpy(mac,argv);int m=strlen(argv);for(i=0;i<m;i+) /判
19、斷命令行輸入的MAC地址是否正確if(maci<'0'|(maci>':'&&maci<'A')|(maci>'Z'&&maci<'a')|maci>'z')cout<<"輸入mac:"<<argv<<"格式錯(cuò)誤"<<endl;return 0;elseif(maci!=':')j+;elsek+;if(j>2)cout&l
20、t;<"輸入mac:"<<argv<<"格式錯(cuò)誤"<<endl;return 0;elsej=0;if(k>5)cout<<"輸入mac:"<<argv<<"格式錯(cuò)誤"<<endl;return 0;for(i=0;i<6;i+) /填充MAC地址while(*(mac+j)=':'|*(mac+j)='-')j+;if(*(mac+j)>='0'&&a
21、mp;*(mac+j)<='9')bi=(unsigned char)(*(mac+j)-'0');if(*(mac+j)>='a'&&*(mac+j)<='z')bi=(unsigned char)(*(mac+j)-'a'+10);if(*(mac+j)>='A'&&*(mac+j)<='Z')bi=(unsigned char)(*(mac+j)-'A'+10);j+;bi*=16;if(*(mac+
22、j)>='0'&&*(mac+j)<='9')bi+=(unsigned char)(*(mac+j)-'0');if(*(mac+j)>='a'&&*(mac+j)<='z')bi+=(unsigned char)(*(mac+j)-'a'+10);if(*(mac+j)>='A'&&*(mac+j)<='Z')bi+=(unsigned char)(*(mac+j)-'A&
23、#39;+10); j+;return 1;bool Send() char AdapterNameA8192; char AdapterNameU2*sizeof(AdapterNameA); unsigned long AdapterAlength=sizeof(AdapterNameA); unsigned long AdapterUlength=2*sizeof(AdapterNameA); DWORD dwVersion=GetVersion (); DWORD dwWindowsMajorVersion=(DWORD)(LOBYTE(LOWORD(dwVersion); if(!(
24、dwVersion >= 0x80000000 && dwWindowsMajorVersion >=4)/Windows NT/獲取UNICODE碼網(wǎng)卡名列表if(PacketGetAdapterNames(AdapterNameU,&AdapterUlength)=FALSE)cout<<"無法得到網(wǎng)卡列表!"<<endl;return FALSE;/將第一個(gè)網(wǎng)卡名轉(zhuǎn)為ASCII碼unsigned short *pAdapterName=(unsigned short *)AdapterNameU;for(un
25、signed i=0;i<AdapterAlength;i+)if(AdapterNameAi=(char)pAdapterNamei)='0')break;else/Windows 9x/獲取ASCII碼網(wǎng)卡名列表if(PacketGetAdapterNames(AdapterNameA,&AdapterAlength)=FALSE)cout<<"無法得到網(wǎng)卡列表!"<<endl;return FALSE;lpAdapter=PacketOpenAdapter(AdapterNameU);/打開網(wǎng)卡if(!lpAdap
26、ter|lpAdapter->hFile=INVALID_HANDLE_VALUE)cout<<"無法打開網(wǎng)卡,錯(cuò)誤碼:"<<GetLastError()<<endl;return FALSE;/發(fā)送幀LPPACKET lpPacket; /分配發(fā)送包結(jié)構(gòu)if(lpPacket=PacketAllocatePacket()!=NULL)/初始化發(fā)送包結(jié)構(gòu)PacketInitPacket(lpPacket,&ARPPACKET,sizeof(ARPPACKET);/ 每次只發(fā)送一個(gè)包PacketSetNumWrites(lpA
27、dapter,1);/發(fā)送包if(PacketSendPacket(lpAdapter,lpPacket,true)=1)cout<<"send ok"<<endl;elsecout<<"發(fā)送包失敗"<<endl;PacketFreePacket(lpPacket); /釋放發(fā)送包結(jié)構(gòu)elsecout<<"分配發(fā)送包LPPACKET結(jié)構(gòu)失敗!"<<endl; PacketCloseAdapter(lpAdapter);return TRUE;3.程序運(yùn)行結(jié)果分析 1)安裝驅(qū)動(dòng)程序。下載Winpcap Driver軟件并安裝,安裝后重啟機(jī)器。 2)下載wpdpack(Developers pack)。解壓后會(huì)看到其中包含docs、Include、lib、Examp
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)課題申報(bào)書 網(wǎng)盤
- 社科基金課題申報(bào)書模板
- 計(jì)算機(jī)科普課題申報(bào)書
- 氫能產(chǎn)業(yè)發(fā)展課題申報(bào)書
- 歷史課題申報(bào)書怎么寫好
- 學(xué)困生課題申報(bào)書范例
- 申報(bào)書課題導(dǎo)師意見
- 幼兒園野趣課題申報(bào)書
- 南京科研課題申報(bào)書
- 代銷代賣合同范本
- 2025年湖南環(huán)境生物職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫及答案一套
- 14 文言文二則 學(xué)弈 教學(xué)設(shè)計(jì)-2024-2025學(xué)年語文六年級(jí)下冊(cè)統(tǒng)編版
- Unit 4 Eat Well(大單元教學(xué)設(shè)計(jì))2024-2025學(xué)年七年級(jí)英語下冊(cè)同步備課系列(人教版2024)
- 2024-2030年中國(guó)游戲直播行業(yè)市場(chǎng)深度分析及投資策略研究報(bào)告
- 第一課+追求向上向善的道德【中職專用】中職思想政治《職業(yè)道德與法治》高效課堂(高教版2023·基礎(chǔ)模塊)
- 浙江省杭州市2024年中考英語真題(含答案)
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗(yàn)人員理論考試題庫及答案
- 教師的五重境界公開課教案教學(xué)設(shè)計(jì)課件案例試卷
- 信用社(銀行)清產(chǎn)核資實(shí)施方案
- 勾股定理求最短路徑問題
- 大洋洲斐濟(jì)群島的成礦地質(zhì)背景_礦床類型及成礦期劃分_徐鳴
評(píng)論
0/150
提交評(píng)論