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

下載本文檔

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

文檔簡(jiǎn)介

1、PAGE PAGE - 19 -封 皮成 績(jī) 評(píng) 定 表學(xué)生姓名范哲銘班級(jí)學(xué)號(hào)1204050316專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)課程設(shè)計(jì)題目發(fā)送ARP數(shù)據(jù)包評(píng)語(yǔ)組長(zhǎng)簽字:成績(jī)?nèi)掌?20 年 月 日課程設(shè)計(jì)任務(wù)書學(xué) 院信息科學(xué)與工程學(xué)院專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名范哲銘班級(jí)學(xué)號(hào)1203050316課程設(shè)計(jì)題目發(fā)送ARP數(shù)據(jù)包實(shí)踐教學(xué)要求與任務(wù): 根據(jù)后面介紹的ARP包結(jié)構(gòu),編寫程序封裝并發(fā)送ARP包。以命令形式運(yùn)行:SendArp source_ip source_mac dest_ip dest_mac其中SendArp為程序名,source_ip為源ip地址,source_mac為源mac地址,d

2、est_ip為目的ip地址,dest_mac為目的mac地址.輸出內(nèi)容:幀各字段值,包括源地址,源地址,目的地址,目的地址等工作計(jì)劃與進(jìn)度安排:第17周星期一:設(shè)計(jì)任務(wù)分析和總體設(shè)計(jì)星期二:軟件算法和流程設(shè)計(jì)星期三:軟件編碼實(shí)現(xiàn)星期四:軟件總體調(diào)試星期五:交課程設(shè)計(jì)報(bào)告、答辯、驗(yàn)收程序指導(dǎo)教師: 2013 年12月9 日專業(yè)負(fù)責(zé)人:2013 年12月10 日學(xué)院教學(xué)副院長(zhǎng):2013 年12 月 11 日摘 要計(jì)算機(jī)網(wǎng)絡(luò)(wnglu)是多個(gè)計(jì)算機(jī)的集合,在網(wǎng)絡(luò)中的計(jì)算機(jī)若想互相通信就需要用到Ethernet 設(shè)備(shbi)。Ethernet 設(shè)備有自己全球唯一(wi y)的MAC地址,它們以M

3、AC地址來傳輸Ethernet數(shù)據(jù)包,但他們卻不能識(shí)別IP包的IP地址。所以,在Ethernet中進(jìn)行IP通信時(shí)就需要一個(gè)協(xié)議來建立IP地址和MAC地址的對(duì)應(yīng)關(guān)系。在ARP協(xié)議中對(duì)于這種情況會(huì)發(fā)送Arp數(shù)據(jù)包用來尋找目的主機(jī)并建立對(duì)應(yīng)關(guān)系用于下次傳輸。關(guān)鍵字:物理幀 ARP幀 ip地址 mac地址目錄一 課程設(shè)計(jì)目的(md)1二 課程設(shè)計(jì)要求(yoqi)1三 系統(tǒng)開發(fā)(kif)語(yǔ)言及環(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ì)

4、小結(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ì)要求(yoqi)根據(jù)后面(hu mian)介紹的ARP包結(jié)構(gòu),編寫程序封裝并發(fā)送ARP包。以命令行形式(xngsh)運(yùn)行: arpsend src_ip src_mac dst_ip dst_mac flag其中arpsend作為程序名。各參數(shù)意義:src_ip: 源IP地址。src_mac: 源MAC地址。dst_ip: 目的IP

5、地址。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 1輸出內(nèi)容:ARP幀的各字?jǐn)?shù)值,包括源IP地址,源MAC地址,目的IP地址,目的MAC地址等。三 系統(tǒng)開發(fā)語(yǔ)言及環(huán)境的選擇操作系統(tǒng):Windows 8運(yùn)行環(huán)境:Microsoft Visual C+ 6.0開發(fā)語(yǔ)言:C+。四 相關(guān)知識(shí) 1.ARP協(xié)議的工作原理 Ethernet 設(shè)備(比如網(wǎng)卡)有自己全球唯一的MAC地址,它們以MAC地址來傳輸Ethernet數(shù)據(jù)包,

6、但他們卻不能識(shí)別IP包的IP地址。所以,在Ethernet中進(jìn)行IP通信時(shí)就需要一個(gè)協(xié)議來建立IP地址和MAC地址的對(duì)應(yīng)關(guān)系,這個(gè)協(xié)議就是ARP協(xié)議。 ARP的基本運(yùn)行過程是:主機(jī)A希望發(fā)行數(shù)據(jù)分組給主機(jī)B,但不知道B的物理地址。A發(fā)送廣播報(bào)文,要求B主機(jī)用他的物理地址來響應(yīng)。網(wǎng)站上所有主機(jī)都接收到這個(gè)分組。B識(shí)別出自己的IP地址,發(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è)(y )重要方法是,在使用ARP的主機(jī)上

7、保留一個(gè)專用的高速緩存,用于存放最近的IP地址和物理地址的綁定,在發(fā)送(f sn)ARP請(qǐng)求時(shí)先看看這個(gè)高速緩存。例如,在命令(mng lng)窗口中輸入:arp-a 得到: Internet Address Physical Address Type00-30-6e-07-e6-de dynamic 這就是該計(jì)算機(jī)里存儲(chǔ)的IP地址與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

8、請(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給了ARP分組格式的示意圖。物理幀頭(14B)ARP幀結(jié)構(gòu)(28B)填充數(shù)據(jù)(18B)CRC(4B)圖1 ARP包格式物理幀頭物理幀頭的結(jié)構(gòu)如2圖所示。目的MAC (6B)源MAC(6B) 類型(2B) ARP幀:0 x0806圖2 物理幀頭格式(2)ARP幀結(jié)構(gòu)

9、圖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(位) 硬件類型(Ethernet:0 x1) 上層協(xié)議類型(IP:0 x0800)硬件地址長(zhǎng)度(0 x6)IP地址長(zhǎng)度(0 x4) 操作(請(qǐng)求: 0 x1; 應(yīng)答: 0 x2) 源MAC地址 源MAC地址 源IP地址 源IP地址 目的MAC地址 目的MAC地址 目的IP地址圖3 ARP

10、幀結(jié)構(gòu)(jigu)五 課程設(shè)計(jì)過程(guchng) 1.流程圖Arp請(qǐng)求,填充dlc頭中目的mac及flag結(jié)束關(guān)閉網(wǎng)卡釋放包結(jié)構(gòu)Y進(jìn)入發(fā)送arp包函數(shù)填充dlc的其他字段及arp頭的各字段Arp請(qǐng)求,填充dlc頭中目的mac及flag選擇并打開網(wǎng)卡?獲取網(wǎng)卡列表?分配并初始化發(fā)送包結(jié)構(gòu)YYNNNYNYFlag=0?N開始發(fā)送成功?定義arp跑結(jié)構(gòu)并初始化命令行參數(shù)=5? 圖5 程序(chngx)流程圖2.源程序代碼(di m)#include #include /此頭文件在VC中并不包含(bohn)需另行下載#pragma comment(lib,wpcap.lib)#pragma comm

11、ent(lib,ws2_32.lib)using namespace std;typedef struct phyframe/用結(jié)構(gòu)(jigu)體自定義物理幀結(jié)構(gòu) unsigned char desmac6; unsigned char srcmac6; unsigned short frametype;PHYFRAME;typedef struct arpframe/用結(jié)構(gòu)體自定義ARP幀結(jié)構(gòu) unsigned short hardwaretype; unsigned short protocoltype; unsigned char maclen; unsigned char iplen;

12、 unsigned short flag; unsigned char srcmac6; unsigned char srcip4; unsigned char desmac6; unsigned char desip4; unsigned char padding18;ARPFRAME;typedef struct arppacket/定義ARP數(shù)據(jù)包,其中包含物理幀和ARP幀 PHYFRAME phyf; ARPFRAME arpf;ARPPACKET;ARPPACKET arpp;int checkmac(char *argv,unsigned char *mac_add)/定義chec

13、kmac函數(shù)用來檢測(cè)輸入的硬件地址格式是否正確,如果正確進(jìn)行賦值 char mac18; int i=0,j=0,k=0; strcpy(mac,argv); int m=strlen(argv); for(i=0;im;i+) if(maci-&maci9&maciZ&maciz)/對(duì)輸入的硬件地址的格式進(jìn)行檢查當(dāng)字符串中的每一位出現(xiàn)(chxin)除了個(gè)位數(shù),大或小寫字母和- 以外的字符時(shí)報(bào)錯(cuò) coutMAC格式(g shi)錯(cuò)誤2)/如果有連續(xù)(linx)兩個(gè)-出現(xiàn),報(bào)錯(cuò) coutMAC格式錯(cuò)誤!5) 如果-的個(gè)數(shù)大于5個(gè)報(bào)錯(cuò) coutMAC格式錯(cuò)誤!endl; return 0; for

14、(i=0;i=0&*(mac+j)=a&*(mac+j)=A&*(mac+j)=0&*(mac+j)=a&*(mac+j)=A&*(mac+j)=Z) mac_addi+=(unsigned char)(*(mac+j)-A+10); return 1;int checkip(char *argv,unsigned char *ip_add) /定義checkip函數(shù)用來檢測(cè)(jin c)輸入的硬件地址格式是否正確,如果正確進(jìn)行賦值 char ip16; int i=0,j=0,k=0; strcpy(ip,argv); int m=strlen(argv); for(i=0;im;i+) i

15、f(ipi.&ipi9)/對(duì)輸入的ip地址進(jìn)行(jnxng)檢查,如果出現(xiàn)數(shù)字和.以外的字符報(bào)錯(cuò) coutIP地址錯(cuò)誤(cuw)!3)/出現(xiàn)連續(xù)四位都是數(shù)字時(shí)報(bào)錯(cuò) coutIP地址錯(cuò)誤!3)/.一共出現(xiàn)三次以上時(shí)報(bào)錯(cuò) coutip 地址錯(cuò)誤!endl; return 0; for(i=0;i4;i+)/如沒有錯(cuò)誤對(duì)IP地址進(jìn)行賦值 while(*(ip+j)=.) j+; ip_addi=(unsigned char)atoi(ip+j); return 1;void main(int argc,char *argv)/主函數(shù)中含有命令行輸入?yún)?shù),所以此程序要用命令提示符來運(yùn)行,在路徑(ljn

16、g)后輸入程序中所需的變量的值直接在程序開始時(shí)就進(jìn)行賦值 if(argc!=5) coutplease input commend:SendArp source_ip source_mac dest_ip dest_macendl; return; int i=0; memset(&arpp,0,sizeof(arpp); if(!checkmac(argv4,arpp.phyf.desmac) return;/對(duì)物理幀和ARP幀中的各個(gè)內(nèi)容(nirng)進(jìn)行賦值 if(!checkmac(argv2,arpp.phyf.srcmac) return; arpp.phyf.frametype=

17、htons(unsigned short)0 x0608); arpp.arpf.hardwaretype=(unsigned short)0 x0100; tocoltype=(unsigned short)0 x0008; arpp.arpf.maclen=(unsigned short)6; arpp.arpf.iplen=(unsigned short)4; if(!checkmac(argv2,arpp.arpf.srcmac) return; if(!checkip(argv1,arpp.arpf.srcip) return; if(!checkmac(a

18、rgv4,arpp.arpf.desmac) return; if(!checkip(argv3,arpp.arpf.desip) return; for(i=0;i18;i+) arpp.arpf.paddingi=0; pcap_if_t *alldevs; /尋找網(wǎng)卡并列(bngli)出網(wǎng)卡列表 pcap_if_t *d,*head=NULL; pcap_t *fp; char errbufPCAP_ERRBUF_SIZE; if(pcap_findalldevs(&alldevs,errbuf)=-1) coutunable to create adapter list!next) c

19、out+i:name; if(d-description) cout descriptionendl; if(i=0) coutno adapter found!endl; return; coutk; if(ki) coutout of rangeendl; return; for(d=alldevs,i=1;inext,i+)/以混雜(hnz)方式打開所選網(wǎng)卡 head=d; if(fp=pcap_open_live(head-name,1000,1,1000,errbuf)=NULL) coutunable to open adapter!endl; pcap_freealldevs(a

20、lldevs); return; if(pcap_sendpacket(fp,(unsigned char*)&arpp,sizeof(unsigned char*)&arpp)=1) coutarp packet send error!endl; return; coutsource mac:argv1endl;/輸出(shch)源/目的物理地址和源/目的IP地址 coutsource ip:argv2endl; coutdest mac:argv3endl; coutdest ip:argv4endl; coutarp 包發(fā)送成功!Option-Directories”,在include files 中添加wpdpackInclude目錄;在Library files中添加wpdpackLib目錄。4)打開VC后,在Project-Settings-link下的Object/library modules框中添加“Packet.lib”和“wpcap.lib”。5)運(yùn)行結(jié)果截

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論