TCP數(shù)據(jù)包的封裝與發(fā)送_第1頁
TCP數(shù)據(jù)包的封裝與發(fā)送_第2頁
TCP數(shù)據(jù)包的封裝與發(fā)送_第3頁
TCP數(shù)據(jù)包的封裝與發(fā)送_第4頁
TCP數(shù)據(jù)包的封裝與發(fā)送_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、TCP數(shù)據(jù)包的封裝與發(fā)送一、實驗?zāi)康恼莆誘CP的工作特點;熟悉TCP數(shù)據(jù)包的結(jié)構(gòu);深刻理解網(wǎng)絡(luò)體系結(jié)構(gòu)中傳輸層與上下層之間的關(guān)系;二、實驗壞境PC機(jī)一臺Windows操作系統(tǒng)三、實驗準(zhǔn)備復(fù)習(xí)TCP協(xié)議的相關(guān)內(nèi)容:熟練掌握TCP數(shù)據(jù)包中各自段的作用;四、實驗內(nèi)容(二選一)編寫程序構(gòu)造TCP包結(jié)構(gòu),并填寫各字段,將封裝后的TCP包的內(nèi)容在屏幕上輸出并寫入指定的文件中;TCP包的數(shù)據(jù)字段內(nèi)容額長度自定;五、實驗報告要求報告內(nèi)容要有主程序的流程圖和程序代碼;報告內(nèi)容要有運行結(jié)果的截圖;對實驗過程進(jìn)行分析,對存在的問題分析。實驗相關(guān)代碼iiiclude#include#include#includemc

2、lude#piagniaconmient(lib,ws2_32.libH)數(shù)據(jù)結(jié)構(gòu)及宏定義:#defineIPVER4/IP協(xié)議預(yù)定defineMAX_EUFF_LEN65500發(fā)送緩沖區(qū)最人值#defineDEST_PORT5050目的端II號#defineSOUR.PORT8080源端II號tvpedefstmctipJidr定義IP首部UCHARh_veilen;UCHARtos;USHORTtotalJen;USHORTident;USHORTfiag_aiid_flags;UCHARttl;UCHARproto;USHORTchecksum;ULONGsouicelP;ULONGde

3、stIP;4位首部長度,4位IP版本號/8位服務(wù)類型TOS16位總長度(字節(jié))/16位標(biāo)識3位標(biāo)志位8位生存時間TTL8位協(xié)議(TCP,UDP或其他)/16位IP首部校驗和/32位源IP地址/32位目的IP地址IP_HEADER;ULONGsaddr;ULONGdaddr;UCHARmbz;UCHARptcl;USHORTtcpl;PSD_HEADER;源地址目的地址沒用協(xié)議類型/TCP長度tvpedefstmcttcp_hdr定義TCP首部USHORTth.sport;USHORTth_dport;ULONGth_seq;ULONGthwack;UCHARthjeiires;UCHARth_

4、flag;USHORTth_win;USHORTth.sum;USHORTth_uip;TCP_HEADER;usingnamespacestd;主要函數(shù):/Checksum:計算校驗和的子函數(shù)/16位源端II16位目的端II/32位序列號/32位確認(rèn)號4位首部長度/6位保留字6位標(biāo)志位16位窗口大小/16位校驗和16位緊急數(shù)據(jù)偏移量USHORTchecksum(USHORTbuffer,mtsize)unsignedlongcksum=0;whil亡(size1)cksum+=*buffer+;size=sizeof(USHORT);tvpedefstmcttsd_hdr定義TCP偽首部if

5、(size)cksum+=*(UCHAR*)buffer;cksum=(cksum16)+(cksum&Oxffiff);cksum+=(cksum16);return(USHORT)(cksum);主函數(shù)mtmaiii(void)IP.HEADERipHeader;TCP.HEADERtcpHeader;PSD_HEADERpsdHeader;chai-TCP.BuffMAX_BUFF.LEN;發(fā)送緩沖區(qū)unsignedshortcheck.BuffIMAX_BUFF.LEN;檢驗和緩沖區(qū)constchartcp_send_data=HThisistest?*;填充IP首部ipHeader.

6、h-veilen=(IPzER4|sizeof(ipHeader)/sizeof(unsignedlong);ipHeader.tos=(UCHAR)0;ipHeader.totaLlen=htons(unsignedshort)sizeof(ipHeadei)+sizeof(tcpHeader)+sizeof(tcp_send_data);ipHeader.ident=O;/16位標(biāo)識lpHeader.fiag_and_flags=O;/3位標(biāo)志位ipHeader.ttl=128;/8位生存時間ipHto=IPPROTO_UDP;協(xié)議類型lpHeader.checksum=

7、O;/檢驗和暫時為0ipHeader.sourceIP=inet_addr(H,f);/32位源IP地址ipHeader.destIP=ineCaddi(nn);/32位目的IP地址計算IP頭部檢驗和meniset(check_Buff,O,NIAX_BUFF_LEN);memcpy(check_Buff.&ipH亡adei;siz亡oIP_HEADER);ipHeader.checksum=checksum(check_Buff.sizeof(IP_HEADER);構(gòu)造TCP偽首部psdHeader.saddi-ipHeader.sourcelP;psdH

8、eader.daddi-ipHeadei.destIP;psdHeader.mbz=O;psdHeader.ptcl=ipHto;psdHeader.tcpl=htons(sizeof(TCP_HEADER)+sizeof(tcp_send_data);填充TCP首部tcpHeader.th.dport=htons(DEST_PORT);/16位目的端I丨號tcpHeader.th_spoit=htons(SOUR_PORT);/16位源端I丨號tcpHeader.th_seq=O:/SYN序列號tcpHeader.th_ack=O;/ACK序列號置為0/TCP長度和保留位t

9、cpHeader.th_lemes=(sizeof(tcpHeader)/sizeof(unsigiiedlong)4|0);tcpHeader.th_flag=2;/i|改這里來實現(xiàn)不同的標(biāo)志位探測,2是SYN,1是/TIN,16是ACK探測等等tcpHeader.th_wm=htoiis(unsignedshort)16384);窗丨I人小tcpHeader.th_urp=O:/偏移大小tcpHeader.th_sum=0;檢驗和暫時填為0計算TCP校驗和meniset(check_Buff,O,MAX_BUFF_LEN);memcpy(check_Buff.&psdHeacki;size

10、of(psdHeack);memcpy(check_Buffrsizeof(psdHeadei),&tcpHdei;sizeof(tcpH亡adeQ);memcpy(check_Buffrsizeof(PSD_HEADER)+sizeof(TCP_HEADER),tcp-send_data5sizeof(tcp-send_data);tcpHeader.th_sum=checksum(check_Buff,sizeof(PSD_HEADER)+siz亡of(TCP_HEADER)+sizeof(tcp_send_data);填充TCP報文meniset(TCP_Buff.0,MAX.BUFF.

11、LEN);memcpy(TCP_Buff,&tcpHeader,sizeof(TCP_HEADER);memcpy(TCP_Buff+sizeof(TCP_HEADER),tcp_send_data,sizeof(tcp_send_data);mtdatasize=sizeof(TCP_HEADER)+sizeof(tcp_send_data);printfC封裝的TCP包如下:nH);char*decodeptr=TCP_Buff;printf(M源端I丨號:%d,nH,ntohs(*(unsignedshort*)decodepti-);decodepti+=sizeof(uiisigne

12、dshort);printff1目的端II號:%dnH,ntohs(*(unsignedshort*)decodeptr);decodepti+=sizeof(uiisignedshort);printf(M序列號:dn”,ntolil(*(unsignedmt*)decodeptr);decodepti+=sizeof(uiisignediiit);printf(M確認(rèn)號:%dn”,ntolil(*(unsignedmt*)decodeptr);decodepti+=sizeof(uiisignediiit);clwheadlen=(*decodeptr)4)*4;piintf(”首部長度:

13、headlen);decodepti+=sizeof(uiisignedchai);pmitf(標(biāo)志:”);switch(*decodepti)case32:pnntf(HURGnn);break;case16:printf(HACKn,);break;case8:prmtfnPSHjiM);break;case4:printf(nRSTnH);break;case2:pnntfSYNS”);bdk;case1:pimtf(nFIIsr,ar,);bieak;default:未知n”);decodepti+=sizeoffunsignedchai);printf(M窗I丨人?。篸iT;ntoh

14、s(*(unsignedshort*)decodeptr);decodepti+=sizeoffunsignedshort);printf(”校驗和:%dn”,ntohs(*(unsignedshort*)decodeptr);decodepti+=sizeoffunsignedshort);printf(”緊急指針:diT;ntohs(*(unsignedshort*)decodeptr);decodepti+=sizeoffunsignedshort);printf(M數(shù)據(jù)區(qū):%sndecodeptr);將TCP包寫入二進(jìn)制文件FILE*fp=NULL;if(fp=fopenCTCP.daf;nwbM)=NULL)priiitf(ncan,topenf

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論