




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖北工业大学课程设计报告设计题目:TCP数据包的发送和接收专业:计算机科学与技术班级:10计科2班学号:11姓名:吕红杰指导老师:涂军发送和接收TC啜据包二设计要求1正确理解题意;2具有良好的编程规范和适当的注释;3有详细的文档,文档中应包括设计题目涉及的基础知识、设计思路、程序流程图、程序清单、开发中遇到的问题及解决方法、设计中待解决的问题及改进方向。三需求分析TCP是一种面向连接的、可靠的传输层协议。TCP协议工作在网络层IP协议的基础上。本课程设计的目的是设计一个发送和接收TCP数据包的程序,其功能是填充一个TCP数据包,发送给目的主机,并在目的主机接收此TCP数据包,将数据字段显示显示
2、在标准输出上。四具体设计1 .创建一个原始套接字,并设置IP头选项SOCKETsock;sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);或者:sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);这里,设置了SOCK_RA惭志,表示我们声明的是一个原始套接字类型。为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED本课程设计中,发送TCP包时隐藏了自己的IP地址,因止生们要自己填充IP头,设置IP头操作选项。其中flag设置为ture,并设定
3、IP_HDRINCL4项,表明自己来构造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示使用发送超时设置,超时时间设置为1000ms。2 .构造IP头和TCP头这里,IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。typedefstru
4、ct_iphdr算校验和的子函数在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下: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.流程图开始构造原始套接字并初始化填充IP首部计算IP首部校验和构造TC或首部填充TCPT部计算TCPt部校验和填充发送缓冲区填入目的地址发送数据包结束五.实验内容1 .先用vc+瑞译运行程序代码2 .用命令指示符运行Debug下的sendTCP3.输入源ip和端口及目的ip和端口4.输入发送内容SS苜匡生:冬令学-serdKPJ.篝IQN花物.QZLOMicroseftMindousl版本b.l.VblJ版杈所有c>2009MicrcisoftCorporation保1留所有杈刑”C-K4)ser&Slt»iliibn.uclC:Wverwu
6、£lilJbaa,kLdp、1心P裁彳居包的发这和拴枚xDcbug"中仁”£、七口将1:11*&7)©5配口175数据包的凝选和接收1)函11?!5已口(11。下192.1&8.0.210192.1£S.0.2LQ1nputVaLd<EndBpCLrl»-Z>;钱是吕红杰,:ti5.发送完成SB芭理员:葡等误示符|。1由111MicrosoftWLndaus_1版本6.1.TbiH工I根权所有匕>2009nicrcisoftCorpsrationD保1留所有杈刑*C-JJserslt»shl
7、bn.cclC-UijCi'sXtulilJba''Jfe&kLpp、T<SP热据包的发运和报殳55口日C:MJsErsXtoshiba'J)esktoiTCPt'I&jSDI>ebu5seri(iTCP192.1&8.0.2101951C9.0.2101 npuLPatd<EndByCLrl»-Z>;成是吕红杰吃悭sendoktC:KllseKtXtDfilhibaXJJeslet:ojpTCPJ据包的发目择D收XDebugr六.附代码#include<>#include<&g
8、t;#include<>#include<>#include<>#include<>#include<>#include<>#pragmacomment(lib,"")#defineIPVER4/IP协议预定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/发送缓冲区最大值/定义IP首部/4位首部长度,4位IP版本号/8位服务类型TOS/16位总长度(字节)/16位标识/3位标志位/8位生存时间TTL/8位协议(TCP,UDP或其他)/16位IP首部校验和/32位源IP地址/32位目的IP地址typedefstructtsd_hdr/定义TCP伪首部ULONGsaddr;/源地址ULONGdaddr;/目的地址UCHARmbz;/没用UCHARptcl;/协议类型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位紧急数据偏移量/Checksum:计算校验和的子函数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;/发送缓冲区unsignedshortche
13、ck_BuffMAX_BUFF_LEN;检验和缓冲区/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;协议类型=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);/构造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;/修改这里来实现不同的标志位探测,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);/填充发送缓冲区memset(Sendto_Buff,0,MAX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚协议补充条款法律咨询合同
- 商业综合体车位使用权转让与商业运营协议
- 拆迁安置补偿与社区安全合同模板
- 生态草场承包租赁管理合同范本
- 车辆保险理赔与购销合作合同范本
- 综合性离婚财产分配及子女抚养协议标准范本
- 水产养殖鱼塘承包合同范本
- 高级采购谈判技巧与合同签订培训协议
- 高端餐厅厨师聘用与厨艺竞赛合作协议
- 能源采购与法务碳排放管理合同
- 健康体检教学课件
- T/CAEPI 49-2022污水处理厂低碳运行评价技术规范
- 2025浙江中考:政治必背知识点
- 2025海南中考:化学必考知识点
- 急性心肌梗死诊断分型及再灌注治疗策略李轶课件
- 西方文化导论试题及答案
- 《建党伟业》观后感课件
- 2025年安全生产月主题宣贯课件
- 2025-2030中国毛衣市场调研及重点企业投资评估规划分析研究报告
- 凉山州属国有企业专业技术人员及管理人员招聘笔试真题2024
- 数学建模思想在中小学数学课堂教学中的应用研究
评论
0/150
提交评论