第一題-編寫(xiě)C++程序輸出IP數(shù)據(jù)包并檢驗(yàn)IP數(shù)據(jù)包正確性---郭照凱_第1頁(yè)
第一題-編寫(xiě)C++程序輸出IP數(shù)據(jù)包并檢驗(yàn)IP數(shù)據(jù)包正確性---郭照凱_第2頁(yè)
第一題-編寫(xiě)C++程序輸出IP數(shù)據(jù)包并檢驗(yàn)IP數(shù)據(jù)包正確性---郭照凱_第3頁(yè)
第一題-編寫(xiě)C++程序輸出IP數(shù)據(jù)包并檢驗(yàn)IP數(shù)據(jù)包正確性---郭照凱_第4頁(yè)
第一題-編寫(xiě)C++程序輸出IP數(shù)據(jù)包并檢驗(yàn)IP數(shù)據(jù)包正確性---郭照凱_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、編寫(xiě)C+程序輸出IP數(shù)據(jù)包并檢驗(yàn)IP數(shù)據(jù)包正確性郭照凱 南開(kāi)大學(xué) 通信工程專(zhuān)業(yè)摘要:本文主要通過(guò)編寫(xiě)C+程序來(lái)輸出網(wǎng)絡(luò)數(shù)據(jù)包中的MAC幀以及IP首部的各個(gè)字段信息。數(shù)據(jù)包本來(lái)是用input文件,但其驗(yàn)證有問(wèn)題,所以就通過(guò)由Wireshark捕獲新的數(shù)據(jù)包。編寫(xiě)程序運(yùn)行后,程序輸出的各個(gè)字段與Wireshark的分析對(duì)比,驗(yàn)證程序的正確性關(guān)鍵詞:C+;Wireshark;MAC幀;IP首部Abstract: This paper mainly by writing C + + program to output network packets in the MAC frames and IP h

2、eader information in various fields. Packet is input files have been, but the verification problem, so Wireshark capture by the new data packet. Write a program running, the program output analysis of the various fields in comparison with Wireshark to verify the correctness of the program.Keywords:

3、C + +; Wireshark; MAC frame; IP header0 引言協(xié)議是兩個(gè)實(shí)體之間用于交換數(shù)據(jù)的一組規(guī)則。協(xié)議通常是按照各個(gè)功能劃分的,而各個(gè)功能又對(duì)應(yīng)不同的層次,上層對(duì)應(yīng)用戶(hù)層,下層是服務(wù)提供層,國(guó)際標(biāo)準(zhǔn)化組織(International Standards Organization ,ISO)的SC16委員會(huì)在1978年3月提出開(kāi)放式互聯(lián)系統(tǒng)(Open Systems Interconnection ,OSI)參考模型作為第一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)的體系的國(guó)際標(biāo)準(zhǔn),目前在互聯(lián)網(wǎng)上最為廣泛應(yīng)用的TCP/IP模型也是國(guó)際標(biāo)準(zhǔn)之一。TCP/IP協(xié)議是Internet最基本的協(xié)議、Int

4、ernet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。了解并且掌握協(xié)議的結(jié)構(gòu),以及各個(gè)字段的含義,有助于更好的理解各個(gè)協(xié)議的原理。本文則通過(guò)編寫(xiě)C+程序來(lái)對(duì)IP數(shù)據(jù)包進(jìn)行解析,并與wireshark捕獲的內(nèi)容進(jìn)行對(duì)比驗(yàn)證其正確性。1 wireshark導(dǎo)出數(shù)據(jù)文件老師給的input文件打開(kāi)之后如下圖所示,可以看得出,這是一個(gè)十六進(jìn)制文件。前七個(gè)字節(jié)的AA是前導(dǎo)碼,AB是幀前定界符,F(xiàn)FFFFFFFFFFF是目的MAC地址,00 27 E3 B4 FC DE是源MAC地址,之后的00 83不是標(biāo)志著幀的類(lèi)型,那么應(yīng)該標(biāo)志著幀的長(zhǎng)度。數(shù)一下,到6E剛好是83(10進(jìn)制是131)

5、,還剩4個(gè)字節(jié),剛好是幀校驗(yàn)序列長(zhǎng)(FCS)。之后又是7個(gè)字節(jié)AA,又開(kāi)始一個(gè)新幀。從最右邊的該16進(jìn)制的文本表示中也可看出。因此input里沒(méi)有IP數(shù)據(jù)報(bào)。圖片1所以,我們用wireshark重新捕獲數(shù)據(jù)包并導(dǎo)出。Wireshark是目前世界上最受歡迎的一款免費(fèi)開(kāi)放的協(xié)議分析軟件,可以用它來(lái)捕獲網(wǎng)絡(luò)上數(shù)據(jù)包并且將其翻譯為人們?nèi)菀鬃x懂的文字和圖標(biāo)形式,極大地方便了對(duì)網(wǎng)絡(luò)活動(dòng)的檢測(cè)分析和教學(xué)實(shí)驗(yàn)。我們通過(guò)登錄我校BT網(wǎng)站得到data數(shù)據(jù)文件為例,步驟如下:1) 打開(kāi)Wireshark,選擇capture-interface-start開(kāi)始捕包。圖片22) 登錄

6、我們可以馬上得到如下的數(shù)據(jù)包:圖片3值得提到的是本來(lái)是出現(xiàn)很多的數(shù)據(jù)包的,其中有很多都不是我們所需要的,之所以由以上的結(jié)果是因?yàn)槲覀冊(cè)贔ilter(過(guò)濾)里面打上了ip.addr=14。14是bt的IP號(hào),是在命令行界面打ping 得到的。圖片4而如果在命令行打入ping ,經(jīng)驗(yàn)證得不到百度的IP號(hào),這也是我們選擇學(xué)校的內(nèi)網(wǎng)網(wǎng)址的原因。圖片53) 選擇數(shù)據(jù)包進(jìn)行導(dǎo)出。選中我們要導(dǎo)出的數(shù)據(jù)包,依次點(diǎn)選菜單目錄下的file-export-file.出現(xiàn)如下界面:圖片6在左下角點(diǎn)選Selecte

7、d packet,保存類(lèi)型選擇C Arrays,以文件名data保存到D盤(pán)。4) 打開(kāi)D盤(pán)的data文件,刪去頭尾不符合C+引用文件的內(nèi)容,并將“,”全部替換為“ ”,并保存文件。data文件截圖如下:圖片72 IP數(shù)據(jù)報(bào)包首部校驗(yàn)和原理說(shuō)明雖然說(shuō)IP協(xié)議提供的是不可靠無(wú)連接的傳輸方式,但是在IP首部中還有一個(gè)字段首部校驗(yàn)和,用來(lái)檢測(cè)IP數(shù)據(jù)報(bào)首部的正確性,對(duì)IP數(shù)據(jù)報(bào)首部進(jìn)行校驗(yàn)。校驗(yàn)和或稱(chēng)檢驗(yàn)和,通常用于對(duì)數(shù)據(jù)塊的校驗(yàn),它把數(shù)據(jù)塊的每?jī)蓚€(gè)字節(jié)按二進(jìn)制加法進(jìn)行循環(huán)求和1韓毅剛.計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)M.北京:機(jī)械工業(yè)出版社,20102劉璟.高級(jí)語(yǔ)言C+程序設(shè)計(jì)(第二版)M.北京:高等教育出版社1?;?/p>

8、本原理如下圖:圖片 83 編寫(xiě)程序并驗(yàn)證IP數(shù)據(jù)包的正確性編寫(xiě)C+程序如下:#include #include#include#includeusing namespace std;struct eth_header unsigned char eth_dst6; unsigned char eth_src6; unsigned short upper_pro; ; /mac頭共14字節(jié)struct ip_headerunion unsigned char version; / 4bitsunsigned char ihl; /4bits; unsigned char tos; /1字節(jié)uns

9、igned short total_len; /2字節(jié)unsigned short identifer; /2字節(jié)unionunsigned short flags; /3bitsunsigned short offset; /13bits;unsigned char TTL; /1字節(jié)unsigned char protocol; /1字節(jié)unsigned short checksum; / 2字節(jié)unsigned char ip_src4; /4字節(jié)unsigned char ip_dst4; /4字節(jié)unsigned int option; / option加填充共為32bits 在此處

10、把這四個(gè)字節(jié)看成一個(gè)字段;void main() /程序主函數(shù),實(shí)現(xiàn)所有功能int temp38; ifstream infile(D:data); /打開(kāi)文件 for(int i=0;ihextempi;infile.close();struct eth_header eth; /定義幀頭結(jié)構(gòu)變量 struct ip_header ip; /定義Ip頭部結(jié)構(gòu)變量/以下給mac幀頭變量賦值for(int i=0;i6;i+)eth.eth_dsti=(unsigned char)tempi;for(int i=6;i12;i+)eth.eth_srci-6=(unsigned char)tem

11、pi; eth.upper_pro=(temp128)|temp13;/以下給ip頭部變量賦值 ip.version=(unsigned char) temp14;ip.tos=(unsigned char)temp15;ip.total_len=(temp168)|temp17;ip.identifer=(temp188)|temp19;ip.flags=(unsigned short) (temp208)|(temp21);ip.TTL=(unsigned char)temp22;tocol=(unsigned char)temp23;ip.checksum=(temp248)

12、|temp25;for(int i=26;i30;i+)ip.ip_srci-26=(unsigned char)tempi;for(int i=30;i34;i+)ip.ip_dsti-30=(unsigned char)tempi;/以下輸出mac頭部信息cout輸出mac幀頭部信息(十六進(jìn)制):endl;cout目的mac地址為:;for(int i=0;i5;i+)coutsetfill(0)setw(2)hex(int)eth.eth_dsti-;coutsetfill(0)setw(2)hex(int)eth.eth_dst5endl;cout源mac地址為:;for(int i=

13、0;i5;i+)coutsetfill(0)setw(2)hex(int)eth.eth_srci-;coutsetfill(0)setw(2)hex(int)eth.eth_src5endl;cout上層協(xié)議類(lèi)型為:;coutsetfill(0)setw(4)hexeth.upper_proendl;cout-endl; /以下輸出ip頭部信息 cout輸出ip頭部信息(十進(jìn)制):endl;cout版本:dec4)endl;ip.ihl=ip.version&0x0f;coutip頭部長(zhǎng)度(ihl):(ip.ihl*4)endl;cout服務(wù)類(lèi)型:(int)ip.tos (優(yōu)先權(quán)子字段:5)

14、 tos子字段:1)&0x0f)endl;cout總長(zhǎng)度:(int)ip.total_lenendl;cout標(biāo)識(shí)符:(int)ip.identiferendl;cout片偏移:(ip.offset&0x1fff)endl;cout生存期:(int)ip.TTLendl;cout協(xié)議:(int)tocolendl;cout首部檢校和:(int)ip.checksumendl;cout源ip地址:;for(int i=0;i3;i+)cout(int)ip.ip_srci.;cout(int)ip.ip_src3endl;cout目的ip地址:;for(int i=0;i3;i+)

15、cout(int)ip.ip_dsti.;cout(int)ip.ip_src3endl;/以下驗(yàn)證有沒(méi)有選項(xiàng)字段if(ip.ihl=5) cout沒(méi)有選項(xiàng)字段endl; for(int i=34;i38;i+) tempi=0; else ip.option=(unsigned int)(temp3424)|(temp3516)|(temp368)|temp37; cout選項(xiàng):(int)ip.optionendl; /如果有選項(xiàng)字段 將選項(xiàng)和填充一起輸出cout-endl; /以下驗(yàn)證ip數(shù)據(jù)包頭部的正確性 unsigned short m1,m2,sum;unsigned int sum1=0;for(int i=14;i37;i=i+2)m1=(unsigned short)(tempi16)+(sum1&0xffff); /oxffff截掉進(jìn)位那一位 sum1=(sum116)+(sum1&0xffff);sum1=(unsigned short)sum1;if(sum1=0)coutip數(shù)據(jù)包是正確的endl;elsecoutip數(shù)據(jù)包是錯(cuò)誤的endl;cout-endl;cin.get(); 運(yùn)行程序的結(jié)果如下圖:圖片9將其與我們用wireshark捕

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論