发送TCP数据包.pdf
《发送TCP数据包.pdf》由会员分享,可在线阅读,更多相关《发送TCP数据包.pdf(13页珍藏版)》请在咨信网上搜索。
1、1发送发送 TCP 数据包数据包1.31.3 相关知识相关知识 编制本程序前要对 TCP 协议有一定的了解。当应用程序有报文需要通过 TCP 发送时,它就将此应用层报文传送给执行 TCP 协议的传输实体。TCP 传输实体将用户数据加上TCP 报头,形成 TCP 数据包,在 TCP 数据包上增加 IP 头部,形成 IP 包。下图显示的是TCP 数据包和 IP 包的关系。TCP 报头TCP 数据IP 数据 IP 报头TCP 协议的传输单元为报文段,其格式如图所示。报文段报头的长度为 20B60B。其中固定长度为 20B,报文段长度最多为 40B。TCP 报文段主要包括以下字段。埠号:埠号字段包括源
2、埠号和目的埠号。每个埠号的长度是 16 位,分别表示发送该 TCP 包的应用进程的埠号和接收该 TCP 包的应用进程的埠号。序号:长度为 32 位。由于 TCP 协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每一个字节编号。序号字段的“序号”指的是本报文段数据的第一个字节的顺序号。TCP 头部数据0 15 16 31源端口号目的端口号序号确认号2报头长度保留URGACKPSHRSTSYNFIN窗口大小校验和紧急指针选项及填充确认号:该字段的长度为 32 位,它表示接收端希望接收的下一个 TCP 包的第一个字节的序号。报头长度:该字段长度为 4 位。TCP 报头长度是以 4
3、B 为一个单元来计算的,实际上报头长度在 20B60B 子间。因此这个字段的值在 515 之间。保留:长度为 6 位,留作今后使用,目前全部置 0。控制:这个字段定义了 6 种不同的标志,每个标志占一位,在同一时间可以设置一位或多位。URG 为 1 时,表明有需要紧急处理的数据。ACK 为 1 时,表明确认号的字段有效。PST 位为 1 时,表明要强制切断连接。SYN 位为 1 时,表明有确立连接的请求,这时,把序号字段的初始值作为序号字段的值,以便开始通信。FIN 为 1 时,表明发送方已经没有资料发送了。窗口大小:长度为 16 位,窗口对应的数据是以字节为单位的数据,因此最多能够传送的数据
4、为 65535B。紧急指针:该字段的长度为 16 位,指向必须紧急处理的数据的位置,只有当标志URG=1 时紧急指针才有效。从 TCP 报头后面的报文资料开始,到紧急指针所指出的长度的数据,就是必须紧急处理的数据。选项:该字段可以多达 40B,包括单字节选项和多字节选项。校验和:该字段长度多达 16 位,校验和的校验范围包括伪头部、TCP 报头以及应用层来的数据。其计算方法与 IP 协议头部的校验的计算方法一样。伪头部为 12B,它本身并不是 TCP 数据包的真正头部,只是在计算校验和时,临时和 TCP 数据包连接在一起。伪头部的格式如下图所示。源 IP 地址目的 IP 地址00000000协
5、议号(6)TCP 长度31.41.4 工作环境工作环境 软件:Microsoft Visual C+6.0;硬件:PC 机一台。二二 课程设计分析课程设计分析本课程设计的目标是发送一个 TCP 资料包,可以利用原始套接字来完成这个工作。整个程序由初始化原始套接字和发送 TCP 数据包两个部分组成。2.12.1 使用原始套接字使用原始套接字SOCKET sock;sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);或者:sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);这里
6、,我们设置了 SOCK_RAW 标志,表示我们声明的是一个原始套接字类型。为使用发送接收超时设置,必须将标志位置位置为 WSA_FLAG_OVERLAPPED。在本课程设计中,发送 TCP 包时隐藏了自己的 IP 地址,因此我们要自己填充 IP 头,设置 IP 头操作选项。其中 flag 设置为 ture,并设定 IP_HDRINCL 选项,表明自己来构造 IP 头。注意,如果设置 IP_HDRINCL 选项,那么必须具有 administrator 权限,要不就必须修改注册表:HKEY_LOCAL_MACHINESystemCurrentControlSetServicesAfdParame
7、ter 修改键:DisableRawSecurity(类型为 DWORD),把值修改为 1。如果没有,就添加。4BOOL Flag=TRUE;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&Flag,sizeof(Flag);int timeout=1000;setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout);在这里我们使用基本套接字 SOL_SOCKET,设置 SO_SNDTIMEO 表示使用发送超时设置,超时时间设置为 1000ms。2 22 2 定义定义
8、IPIP 头部、头部、TCPTCP 头部和伪头部的数据结构头部和伪头部的数据结构/定义 IP 首部typedef struct _iphdr UCHAR h_lenver;/4 位首部长度+4 位 IP 版本号 UCHAR tos;/8 位服务类型 TOS USHORT total_len;/16 位总长度(字节)USHORT ident;/16 位标识 USHORT frag_and_flags;/3 位标志位 UCHAR ttl;/8 位生存时间 TTL UCHAR proto;/8 位协议(TCP,UDP 或其它)USHORT checksum;/16 位 IP 首部校验和 ULONG
9、sourceIP;/32 位源 IP 地址 ULONG destIP;/32 位目的 IP 地址 IP_HEADER;/定义 TCP 伪首部5typedef struct psd_hdr ULONG saddr;/源地址 ULONG daddr;/目的地址 UCHAR mbz;/没用UCHAR ptcl;/协议类型 USHORT tcpl;/TCP 长度 PSD_HEADER;/定义 TCP 首部typedef struct _tcphdr USHORT th_sport;/16 位源埠 USHORT th_dport;/16 位目的端口 ULONG th_seq;/32 位序列号 ULONG
10、 th_ack;/32 位确认号 UCHAR th_lenres;/4 位首部长度/6 位保留字 UCHAR th_flag;/6 位标志位 USHORT th_win;/16 位窗口大小 USHORT th_sum;/16 位校验和 USHORT th_urp;/16 位紧急数据偏移量 TCP_HEADER;2.32.3 计算校验和的子函数计算校验和的子函数在填充数据包的过程中,需要调用计算校验和的函数 checksum 两次,分别用于校验 IP头和 TCP 头部(加上伪头部),其实现代码如下:USHORT checksum(USHORT*buffer,int size)6 unsigned
11、 long cksum=0;while(size 1)cksum+=*buffer+;size-=sizeof(USHORT);if(size)cksum+=*(UCHAR*)buffer;cksum=(cksum 16)+(cksum&0 xffff);cksum+=(cksum 16);return(USHORT)(cksum);72.4 程序流程程序流程图图开始结束构造原始套接字,并初始化发送 TCP 资料报计算 TCP 头部校验和填充 IP 头部计算 IP 头部校验和构造 TCP 伪头部填充 TCP 头部8三三 源代码源代码#include#include#include#includ
12、e#include#include#include#include#pragma comment(lib,ws2_32.lib)#define IPVER 4 /IP 协议预定#define MAX_BUFF_LEN 65500 /发送缓冲区最大值typedef struct ip_hdr /定义 IP 首部 UCHAR h_verlen;/4 位首部长度,4 位 IP 版本号 UCHAR tos;/8 位服务类型 TOS USHORT total_len;/16 位总长度(字节)USHORT ident;/16 位标识 USHORT frag_and_flags;/3 位标志位 UCHAR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 发送 TCP 数据包
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。