TCP數(shù)據(jù)包的發(fā)送和接收設(shè)計報告_第1頁
TCP數(shù)據(jù)包的發(fā)送和接收設(shè)計報告_第2頁
TCP數(shù)據(jù)包的發(fā)送和接收設(shè)計報告_第3頁
TCP數(shù)據(jù)包的發(fā)送和接收設(shè)計報告_第4頁
TCP數(shù)據(jù)包的發(fā)送和接收設(shè)計報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、湖北工業(yè)大學(xué)課程設(shè)計報告設(shè)計題目:TCP數(shù)據(jù)包的發(fā)送和接收專業(yè):計算機科學(xué)與技術(shù)班級:10計科2班學(xué)號:11姓名:呂紅杰指導(dǎo)老師:涂軍發(fā)送和接收TC啜據(jù)包二設(shè)計要求1正確理解題意;2具有良好的編程規(guī)范和適當?shù)淖⑨專?有詳細的文檔,文檔中應(yīng)包括設(shè)計題目涉及的基礎(chǔ)知識、設(shè)計思路、程序流程圖、程序清單、開發(fā)中遇到的問題及解決方法、設(shè)計中待解決的問題及改進方向。三需求分析TCP是一種面向連接的、可靠的傳輸層協(xié)議。TCP協(xié)議工作在網(wǎng)絡(luò)層IP協(xié)議的基礎(chǔ)上。本課程設(shè)計的目的是設(shè)計一個發(fā)送和接收TCP數(shù)據(jù)包的程序,其功能是填充一個TCP數(shù)據(jù)包,發(fā)送給目的主機,并在目的主機接收此TCP數(shù)據(jù)包,將數(shù)據(jù)字段顯示顯示

2、在標準輸出上。四具體設(shè)計1 .創(chuàng)建一個原始套接字,并設(shè)置IP頭選項SOCKETsock;sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);或者:sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);這里,設(shè)置了SOCK_RA慚志,表示我們聲明的是一個原始套接字類型。為使用發(fā)送接收超時設(shè)置,必須將標志位置位置為WSA_FLAG_OVERLAPPED本課程設(shè)計中,發(fā)送TCP包時隱藏了自己的IP地址,因止生們要自己填充IP頭,設(shè)置IP頭操作選項。其中flag設(shè)置為ture,并設(shè)定

3、IP_HDRINCL4項,表明自己來構(gòu)造IP頭。setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&Flag,sizeof(Flag);inttimeout=1000;setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout);在這里我們使用基本套接字SOL_SOCKE歿置SO_SNDTIMEOt示使用發(fā)送超時設(shè)置,超時時間設(shè)置為1000ms。2 .構(gòu)造IP頭和TCP頭這里,IP頭和TCP頭以及TCP偽部的構(gòu)造請參考下面它們的數(shù)據(jù)結(jié)構(gòu)。typedefstru

4、ct_iphdr算校驗和的子函數(shù)在填充數(shù)據(jù)包的過程中,需要調(diào)用計算校驗和的函數(shù)checksum兩次,分別用于校驗IP頭和TCP頭部(加上偽頭部),其實現(xiàn)代碼如下:USHORTchecksum(USHORT*buffer,intsize)unsignedlongcksum=0;while(size>1)cksum+=*buffer+;size-=sizeof(USHORT);if(size)cksum+=*(UCHAR*)buffer;cksum=(cksum>>16)+(cksum&Oxffff);cksum+=(cksum>>16);return(USH

5、ORT)(cksum);4.流程圖開始構(gòu)造原始套接字并初始化填充IP首部計算IP首部校驗和構(gòu)造TC或首部填充TCPT部計算TCPt部校驗和填充發(fā)送緩沖區(qū)填入目的地址發(fā)送數(shù)據(jù)包結(jié)束五.實驗內(nèi)容1 .先用vc+瑞譯運行程序代碼2 .用命令指示符運行Debug下的sendTCP3.輸入源ip和端口及目的ip和端口4.輸入發(fā)送內(nèi)容SS苜匡生:冬令學(xué)-serdKPJ.篝IQN花物.QZLOMicroseftMindousl版本b.l.VblJ版杈所有c>2009MicrcisoftCorporation保1留所有杈刑”C-K4)ser&Slt»iliibn.uclC:Wverwu

6、£lilJbaa,kLdp、1心P裁彳居包的發(fā)這和拴枚xDcbug"中仁”£、七口將1:11*&7)©5配口175數(shù)據(jù)包的凝選和接收1)函11?!5已口(11。下192.1&8.0.210192.1£S.0.2LQ1nputVaLd<EndBpCLrl»-Z>;錢是呂紅杰,:ti5.發(fā)送完成SB芭理員:葡等誤示符|。1由111MicrosoftWLndaus_1版本6.1.TbiH工I根權(quán)所有匕>2009nicrcisoftCorpsrationD保1留所有杈刑*C-JJserslt»shl

7、bn.cclC-UijCi'sXtulilJba''Jfe&kLpp、T<SP熱據(jù)包的發(fā)運和報殳55口日C:MJsErsXtoshiba'J)esktoiTCPt'I&jSDI>ebu5seri(iTCP192.1&8.0.2101951C9.0.2101 npuLPatd<EndByCLrl»-Z>;成是呂紅杰吃慳sendoktC:KllseKtXtDfilhibaXJJeslet:ojpTCPJ據(jù)包的發(fā)目擇D收XDebugr六.附代碼#include<>#include<&g

8、t;#include<>#include<>#include<>#include<>#include<>#include<>#pragmacomment(lib,"")#defineIPVER4/IP協(xié)議預(yù)定typedef struct ip_hdrUCHAR h_verlen;UCHAR tos;USHORT total_len;USHORT ident;USHORT frag_and_flags;UCHAR ttl;UCHAR proto;USHORT checksum;ULONG sourceIP

9、;ULONG destIP;IP_HEADER;#defineMAX_BUFF_LEN65500/發(fā)送緩沖區(qū)最大值/定義IP首部/4位首部長度,4位IP版本號/8位服務(wù)類型TOS/16位總長度(字節(jié))/16位標識/3位標志位/8位生存時間TTL/8位協(xié)議(TCP,UDP或其他)/16位IP首部校驗和/32位源IP地址/32位目的IP地址typedefstructtsd_hdr/定義TCP偽首部ULONGsaddr;/源地址ULONGdaddr;/目的地址UCHARmbz;/沒用UCHARptcl;/協(xié)議類型USHORTtcpl;/TCP長度PSD_HEADER;typedefstructtcp

10、_hdr/定義TCP首部USHORTth_sport;USHORTth_dport;ULONGth_seq;ULONGth_ack;UCHARth_lenres;UCHARth_flag;USHORTth_win;USHORTth_sum;USHORTth_urp;TCP_HEADER;/16位源端口/16位目的端口/32位序列號/32位確認號/4位首部長度/6位保留字/6位標志位/16位窗口大小/16位校驗和/16位緊急數(shù)據(jù)偏移量/Checksum:計算校驗和的子函數(shù)USHORTchecksum(USHORT*buffer,intsize)unsignedlongcksum=0;while(

11、size>1)cksum+=*buffer+;size-=sizeof(USHORT);if(size)cksum+=*(UCHAR*)buffer;cksum=(cksum>>16)+(cksum&0xffff);cksum+=(cksum>>16);return(USHORT)(cksum);intReadData(char*str,intmaxlen)intreadlen=0;charch=NULL;if(str=NULL|maxlen<=0)printf("ReadDataError!n");return0;/failed

12、printf("InputData(EndByCtrl+Z):n");while(maxlen)ch=getchar();if(ch=EOF)break;strreadlen+=ch;maxlen-;strreadlen=NULL;returnreadlen;intmain(intargc,char*argv)WSADATAWSAData;SOCKETsock;IP_HEADERipHeader;TCP_HEADERtcpHeader;PSD_HEADERpsdHeader;charSendto_BuffMAX_BUFF_LEN;/發(fā)送緩沖區(qū)unsignedshortche

13、ck_BuffMAX_BUFF_LEN;檢驗和緩沖區(qū)/chartcp_send_data1000;intread_data_len=0;BOOLflag;intrect,nTimeOver;if(argc!=5)printf("Usage:SendTcpsoruce_ipsource_portdest_ipdest_portn");returnfalse;read_data_len=ReadData(tcp_send_data,1000);if(read_data_len<=0)return1;if(WSAStartup(MAKEWORD(2,2),&WSAD

14、ata)!=0)printf("WSAStartupError!n");returnfalse;if(sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED)=INVALID_SOCKET)printf("SocketSetupError!n");returnfalse;flag=true;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag)=SOCKET_ERROR)printf(

15、"setsockoptIP_HDRINCLerror!n");returnfalse;nTimeOver=1000;if(setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&nTimeOver,sizeof(nTimeOver)=SOCKET_ERROR)printf("setsockoptSO_SNDTIMEOerror!n");returnfalse;填充IP首部=(IPVER<<4|sizeof(ipHeader)/sizeof(unsignedlong);=(UCHAR)0;=hton

16、s(unsignedshort)sizeof(ipHeader)+sizeof(tcpHeader)+read_data_len);=0;/16位標識=0;/3位標志位=128;/8位生存時間=IPPROTO_TCP;協(xié)議類型=0;/檢驗和暫時為0=inet_addr(argv1);/32位源IP地址=inet_addr(argv3);/32位目的IP地址計算IP頭部檢驗和memset(check_Buff,0,MAX_BUFF_LEN);memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER);=checksum(check_Buff,sizeof(

17、IP_HEADER);/構(gòu)造TCP偽首部=0;=;=htons(sizeof(TCP_HEADER)+read_data_len);填充TCP首部=htons(atoi(argv4);/16位目的端口號=htons(atoi(argv2);/16位源端口號=0;/SYN序列號=0;/ACK序列號置為0/TCP長度和保留位=(sizeof(tcpHeader)/sizeof(unsignedlong)<<4|0);=2;/修改這里來實現(xiàn)不同的標志位探測,2是SYN1是/FIN,16是ACKf測等等=htons(unsignedshort)16384);/窗口大小=0;/偏移大小=0;

18、/檢驗和暫時填為0/計算TCP校驗和memset(check_Buff,0,MAX_BUFF_LEN);memcpy(check_Buff,&psdHeader,sizeof(psdHeader);memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader);memcpy(check_Buff+sizeof(PSD_HEADER)+sizeof(TCP_HEADER),tcp_send_data,read_data_len);=checksum(check_Buff,sizeof(PSD_HEADER)+sizeof(TCP_HEADER)+read_data_len);/填充發(fā)送緩沖區(qū)memset(Sendto_Buff,0,MAX

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論