發(fā)送Ethernet+ARP數(shù)據(jù)包_第1頁(yè)
發(fā)送Ethernet+ARP數(shù)據(jù)包_第2頁(yè)
發(fā)送Ethernet+ARP數(shù)據(jù)包_第3頁(yè)
發(fā)送Ethernet+ARP數(shù)據(jù)包_第4頁(yè)
發(fā)送Ethernet+ARP數(shù)據(jù)包_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告題 目 發(fā)送Ethernet ARP包 學(xué) 院 數(shù)理與信息工程學(xué)院 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí) 計(jì)科101 學(xué) 號(hào) 201059225101 學(xué)生姓名 王立娟 同組成員 潘明越、曾兵、田勝杰、宋煉杰、陳坦、韋國(guó)挺 指導(dǎo)教師 郭步 編寫(xiě)日期 2012-6-30 目錄一、程設(shè)計(jì)的目的和意義2二、設(shè)計(jì)的內(nèi)容和要求2三、設(shè)計(jì)的相關(guān)技術(shù)33.1 ARP協(xié)議及工作原理33.2 ARP的分組格式33.3工作原理43.4 ARP包的填充6四、程設(shè)計(jì)過(guò)程64.1流程圖74.2源程序84.3運(yùn)行結(jié)果18五、課程設(shè)計(jì)小結(jié)19六、參考文獻(xiàn)19一、程設(shè)計(jì)的目的和意義IP地址將不同的物理

2、地址統(tǒng)一起來(lái),從而將物理地址隱藏起來(lái),上層軟件使用IP地址標(biāo)識(shí)結(jié)點(diǎn)。但是。兩臺(tái)計(jì)算機(jī)只有在知道彼此的物理地址時(shí)才能進(jìn)行通信。IP數(shù)據(jù)包常通過(guò)Ethernet發(fā)送。Ethernet設(shè)備并不識(shí)別32位IP地址,它們是以48位MAC地址傳輸Ethernet數(shù)據(jù)包的。因此,IP驅(qū)動(dòng)器必須把IP目的地址轉(zhuǎn)換成Ethernet網(wǎng)絡(luò)目的地址。這兩種地址之間存在著某種靜態(tài)的或動(dòng)態(tài)的映射,通常需要查看一張表來(lái)進(jìn)行這種映射。這種地址協(xié)議(ARP)就是用來(lái)確定這些映象的協(xié)議。ARP工作時(shí),送出一個(gè)所希望的IP地址的Ethernet廣播數(shù)據(jù)包。目的地主機(jī)以一個(gè)含有IP和Ethernet地址對(duì)的數(shù)據(jù)包作為應(yīng)答。發(fā)送者將

3、這個(gè)地址對(duì)高速緩存起來(lái),以節(jié)約不必要的ARP通信。本課程設(shè)計(jì)的目的是進(jìn)一步熟悉ARP協(xié)議的幀結(jié)構(gòu)以及它的運(yùn)行過(guò)程。二、設(shè)計(jì)的內(nèi)容和要求2.1 基本要求 本次課程設(shè)計(jì)的基本要求是在熟悉ARP協(xié)議并了解Winpcap編程,或者下載JAVA類:jpcap包構(gòu)造ARP包,選擇并打開(kāi)網(wǎng)卡,將ARP包發(fā)送。1)命令行格式: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表示AR

4、P應(yīng)答。例如:arpsend FA:01:02:03:04:05 0D:E1:02:03:B4:06 12)輸出:Send OK。3)程序的正確性的檢驗(yàn)??梢园惭b一個(gè)截包軟件,如Iris,運(yùn)行該軟件以查看能否收到程序發(fā)出的ARP包,并檢查包中個(gè)字段填充的內(nèi)容(如各地址,協(xié)議類型)是否正確。Error! No bookmark name given.2. 2系統(tǒng)開(kāi)發(fā)語(yǔ)言及環(huán)境的選擇操作系統(tǒng):Windows XP Professional運(yùn)行環(huán)境:Microsoft Visual C+ 6.0開(kāi)發(fā)語(yǔ)言:C語(yǔ)言,C+等三、設(shè)計(jì)的相關(guān)技術(shù)3.1 ARP協(xié)

5、議及工作原理 ARP協(xié)議是“Address Resolution Protocol”(地址解析協(xié)議)的縮寫(xiě)。在局域網(wǎng)中,網(wǎng)絡(luò)中實(shí)際傳輸?shù)氖恰皫?,幀里面是有目?biāo)主機(jī)的MAC地址的。在以太網(wǎng)中,一個(gè)主機(jī)要和另一個(gè)主機(jī)進(jìn)行直接通信,必須要知道目標(biāo)主機(jī)的MAC地址。但這個(gè)目標(biāo)MAC地址是如何獲得的呢?它就是通過(guò)地址解析協(xié)議獲得的。所謂“地址解析”就是主機(jī)在發(fā)送幀前將目標(biāo)IP地址轉(zhuǎn)換成目標(biāo)MAC地址的過(guò)程。ARP協(xié)議的基本功能就是通過(guò)目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行。ARP的基本運(yùn)行過(guò)程是:1) 主機(jī)A希望發(fā)送數(shù)據(jù)分組給主機(jī)B,但不知道B的物理地址。2) A發(fā)送廣播報(bào)

6、文,要求B主機(jī)用它的物理地址來(lái)響應(yīng)。3) 網(wǎng)站上所有主機(jī)都接收到這個(gè)分組。4) B識(shí)別出自己的IP地址,發(fā)送應(yīng)答報(bào)文,告訴A自己的物理地址。32 ARP的分組格式物理幀頭(14B)ARP幀結(jié)構(gòu)(28B)填充數(shù)據(jù)(18B)CRC(4B)圖一 ARP分組格式目的MAC (6B)源MAC(6B) 類型(2B) 圖2 物理幀頭 0 8 16 24 31(位) 硬件類型(Ethernet:0x1) 上層協(xié)議類型(IP:0x0800)硬件地址長(zhǎng)度(0x6)IP地址長(zhǎng)度(0x4) 操作(請(qǐng)求: 0x1; 應(yīng)答: 0x2) 源MAC地址 源MAC地址 源IP地址 源IP地址 目的MAC地址 目的MAC地址 目

7、的IP地址圖3 ARP幀結(jié)構(gòu)3.3工作原理: 源主機(jī)在傳輸數(shù)據(jù)前,首先要對(duì)初始數(shù)據(jù)進(jìn)行封裝,在該過(guò)程中會(huì)把目的主機(jī)的IP地址和MAC地址封裝進(jìn)去。在通信的最初階段,我們能夠知道目的主機(jī)的IP地址,而MAC地址卻是未知的。這時(shí)如果目的主機(jī)和源主機(jī)在同一個(gè)網(wǎng)段內(nèi),源主機(jī)會(huì)以第二層廣播的方式發(fā)送ARP請(qǐng)求報(bào)文。ARP請(qǐng)求報(bào)文中含有源主機(jī)的IP地址和MAC地址,以及目的主機(jī)的IP地址。當(dāng)該報(bào)文通過(guò)廣播方式到達(dá)目的 主機(jī)時(shí),目的主機(jī)會(huì)響應(yīng)該請(qǐng)求,并返回ARP響應(yīng)報(bào)文,從而源主機(jī)可以獲取目的主機(jī)的MAC地址,同樣目的主機(jī)也能夠獲得源主機(jī)的MAC地址。如果目的主機(jī)和源主機(jī)地址不在同一個(gè)網(wǎng)段內(nèi),源主機(jī)發(fā)出的I

8、P數(shù)據(jù)包會(huì)送到交換機(jī)的默認(rèn)網(wǎng)關(guān),而默認(rèn)網(wǎng)關(guān)的MAC地址同樣可以通過(guò)ARP協(xié)議獲取。經(jīng)過(guò)ARP協(xié)議解析IP地址之后,主機(jī)會(huì)在緩存中保存IP地址和MAC地址的映射條目,此后再進(jìn)行數(shù)據(jù)交換時(shí)只要從緩存中讀取映射條目即可。ARP協(xié)議工作原理詳見(jiàn)圖4.圖4 網(wǎng)段內(nèi)ARP工作原理關(guān)于ARP的功能,僅限于在沒(méi)有安全防護(hù)的網(wǎng)絡(luò)里。1) 如果有多個(gè)用戶都在同一個(gè)網(wǎng)關(guān)上網(wǎng),那么若要禁止機(jī)器A上網(wǎng),應(yīng)該怎么做呢?就是讓A得不到正確的網(wǎng)關(guān)的ARP映射??梢圆扇∪缦麓胧簜窝b成網(wǎng)關(guān),給機(jī)器A發(fā)送ARP包,該ARP的發(fā)送方為網(wǎng)關(guān)的IP,而MAC部分隨便填一個(gè)地址;接收方正確填寫(xiě)A的相關(guān)信息。2)基于ARP欺騙的監(jiān)聽(tīng)。如果

9、某臺(tái)計(jì)算機(jī)C和計(jì)算機(jī)A、B位于同一個(gè)局域網(wǎng)內(nèi),那么如何監(jiān)聽(tīng)A和B間的通信呢?很簡(jiǎn)單,對(duì)A說(shuō)“我是B”,在對(duì)B說(shuō)“我是A”。具體的操作如下:給A發(fā)送一個(gè)偽造的ARP回應(yīng)包,告訴A,B的IP對(duì)應(yīng)的MAC為C的MAC地址,于是A就會(huì)相應(yīng)地刷新自己的ARP緩存,將發(fā)給B的數(shù)據(jù)都發(fā)送到主機(jī)C上來(lái)。當(dāng)然,因?yàn)锳RP緩存是動(dòng)態(tài)的,有超時(shí)時(shí)間,所以必須每隔一段時(shí)間就給A發(fā)送一個(gè)ARP回應(yīng)包。為了不讓B發(fā)現(xiàn),我們還要對(duì)每次接受到的數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)。這樣就監(jiān)聽(tīng)了A發(fā)送給B的信息。如果想監(jiān)聽(tīng)B發(fā)送給A的信息,方法類似。34 ARP包的填充 將命令行的參數(shù)作適當(dāng)?shù)霓D(zhuǎn)換后填到ARP分組結(jié)構(gòu)的各字段中即可。 要注意的是,填

10、充請(qǐng)求包時(shí)。因?yàn)榘贓thernet上廣播,所以,物理幀頭的“目的MAC”字段要填充為FFFFFFFFFFFF;而ARP幀結(jié)構(gòu)中的目的MAC可填充為任意值,因?yàn)樗藭r(shí)不起作用。“填充數(shù)據(jù)”字段要填充為0。四、程設(shè)計(jì)過(guò)程4.1 流程圖Y獲取網(wǎng)卡列表?選擇網(wǎng)卡打開(kāi)?命令行參數(shù) = 6?Flag=0?發(fā)送包成功? 開(kāi)始YNYNYNNNY結(jié)束關(guān)閉網(wǎng)卡 釋放包結(jié)構(gòu)分配及初始化發(fā)送包結(jié)構(gòu)進(jìn)入發(fā)送ARP包函數(shù)填充DLC的其他字段及ARP頭的各字段ARP請(qǐng)求,填充DLC頭中目的MAC及FlagARP請(qǐng)求,填充DLC頭中目的MAC(廣播,全F)及Flag定義ARP包結(jié)構(gòu)并初始化 圖5 程序流程圖4.2源程序#

11、include #include #include #include #include #include #include #pragma comment(lib,ws2_32.lib)/ DLC頭typedef struct DLCHeader unsigned char DesMAC6; unsigned char SrcMAC6; unsigned short Ethertype; DLCHEADER;/ ARP楨typedef struct ARPFrame unsigned short HW_Type; unsigned short Prot_Type; unsigned char

12、HW_Addr_Len; unsigned char Prot_Addr_Len; unsigned short Flag; unsigned char Send_HW_Addr6; unsigned char Send_Prot_Addr4; unsigned char Targ_HW_Addr6; unsigned char Targ_Prot_Addr4; unsigned char padding18; ARPFRAME;/ ARP包=DLC頭+ARP楨typedef struct ARPPacket DLCHeader dlcHeader; ARPFrame arpFrame;*PA

13、RPPACKET;ARPPacket ARPPACKET;/源文件.cpp#include #include /#include h.hint transIP(char *,unsigned char *);int transMAC(char *,unsigned char *);LPADAPTER lpAdapter;LPPACKET lpPacket;bool Send();void main(int argc,char *argv)if(argc!=6) cout輸入格式錯(cuò)誤endl; return;int i=0;memset(&ARPPACKET, 0, sizeof(ARPPACK

14、ET);if(*argv5=0) for(i=0;i6;i+) ARPPACKET.dlcHeader.DesMACi=0xff; ARPPACKET.arpFrame.Flag=(unsigned short)1;else if(*argv5=1) /填充DLC頭中目的MAC地址 if(!transMAC(argv4,ARPPACKET.dlcHeader.DesMAC) return; /ARP楨中flag位置2 ARPPACKET.arpFrame.Flag=(unsigned short)0x0200; else coutflag位輸入錯(cuò)誤endl;if(!transMAC(argv2

15、,ARPPACKET.dlcHeader.SrcMAC) return;/填充DLC頭中楨類型ARPPACKET.dlcHeader.Ethertype=htons(unsigned short)0x0608);ARPPACKET.arpFrame.HW_Type=(unsigned short)0x0100;/(Ethernet類型)ARPPACKET.arpFrame.Prot_Type=(unsigned short)0x0008;ARPPACKET.arpFrame.HW_Addr_Len=(unsigned char)6;ARPPACKET.arpFrame.Prot_Addr_Le

16、n=(unsigned char)4;if(!transMAC(argv2,ARPPACKET.arpFrame.Send_HW_Addr) return;if(!transIP(argv1,ARPPACKET.arpFrame.Send_Prot_Addr) return;if(!transMAC(argv4,ARPPACKET.arpFrame.Targ_HW_Addr) return;if(!transIP(argv3,ARPPACKET.arpFrame.Targ_Prot_Addr) return;for(i=0;i18;i+) ARPPACKET.arpFrame.paddingi

17、=0;if(!Send() cout發(fā)送arp包失敗endl;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;im;i+) /判斷命令行輸入的IP格式是否正確 if(ipi9)&ipi!=.) cout輸入ip:argv格式錯(cuò)誤3) cout輸入ip:argv格式錯(cuò)誤3) cout輸入ip:argv格式錯(cuò)誤endl; return 0; j=0; for(i=0;i4;i+) /填充IP地址 while(*(ip+j

18、)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;im;i+) /判斷命令行輸入的MAC地址是否正確 if(maci:&maciZ&maciZ) cout輸入mac:argv格式錯(cuò)誤2) cout輸入macargv格式錯(cuò)誤5) cout輸入macargv格式錯(cuò)誤e

19、ndl; return 0; for(i=0;i=0&*(mac+j)=a&*(mac+j)=A&*(mac+j)=0&*(mac+j)=a&*(mac+j)=A&*(mac+j)= 0x80000000 & dwWindowsMajorVersion =4) /Windows NT /獲取UNICODE碼網(wǎng)卡名列表 if(PacketGetAdapterNames(AdapterNameU,&AdapterUlength)=FALSE) cout無(wú)法得到網(wǎng)卡列表!endl; return FALSE; /將第一個(gè)網(wǎng)卡名轉(zhuǎn)為ASCII碼 unsigned short *pAdapterName

20、=(unsigned short *)AdapterNameU; for(unsigned i=0;iAdapterAlength;i+) if(AdapterNameAi=(char)pAdapterNamei)=0) break; else /Windows 9x /獲取ASCII碼網(wǎng)卡名列表 if(PacketGetAdapterNames(AdapterNameA,&AdapterAlength)=FALSE) cout無(wú)法得到網(wǎng)卡列表!hFile=INVALID_HANDLE_VALUE) cout無(wú)法打開(kāi)網(wǎng)卡,錯(cuò)誤碼:GetLastError()endl; return FALSE

21、; /發(fā)送幀 LPPACKET lpPacket; /分配發(fā)送包結(jié)構(gòu) 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) coutsend okendl; else cout發(fā)送包失敗endl; PacketFreePacket(lpPack

22、et); /釋放發(fā)送包結(jié)構(gòu) else cout分配發(fā)送包LPPACKET結(jié)構(gòu)失敗!endl; PacketCloseAdapter(lpAdapter); return TRUE; 4.3運(yùn)行結(jié)果1.應(yīng)該在預(yù)編譯代碼區(qū)加上預(yù)編譯指令:#pragma comment(lib, ws2_32.lib);否則,鏈接時(shí)會(huì)出現(xiàn)符號(hào)無(wú)法解析的錯(cuò)誤。2.程序中填充DLC頭中幀類型應(yīng)該是:ARPPACKET.dlcHeader.Ethertype = htons(unsigned short)0x0806);而實(shí)驗(yàn)所給的代碼卻是:ARPPACKET.dlcHeader.Ethertype = htons(un

23、signed short)0x0608);。而ARP報(bào)文封裝在以太網(wǎng)幀中的幀類型字段應(yīng)該是0x0806。3.程序在int transMAC(char *argv, unsigned char *b)函數(shù)中,判斷MAC地址的格式是否正確后,在填充MAC地址之前,應(yīng)該初始化局部變量j的值,即:j=0;。否則,在MAC地址格式正確的情況下,j的值為2,而后面填充MAC地址的時(shí)候會(huì)把正確的MAC地址的第一個(gè)十六進(jìn)制字段刪除。例如:正確的MAC地址- 11:12:13:14:15:16在被填充后會(huì)變成12:13:14:15:16:00。4.在bool Send()函數(shù)中,原程序打開(kāi)網(wǎng)卡的程序代碼為:lpAdapter = PacketOpenAdapter(AdapterNameA);。但是在XP系統(tǒng)中運(yùn)行該程序時(shí),始終打不開(kāi)網(wǎng)卡。后經(jīng)過(guò)分析,得知XP系統(tǒng)中的網(wǎng)卡名是UNICODE編碼的,占2個(gè)字節(jié),而AdapterNameA的長(zhǎng)度是1個(gè)字節(jié)的ASCII編碼方式。后來(lái)把那句代碼改為:lpAdapter = PacketOpenAda

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論