发送TCP数据包..doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
发送TCP数据包.

发送TCP数据包 一 课程设计准备 1.1课设计 TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP协议在网络层IP协议的基础上,向应用层用户进程提供可靠的、全双工的数据传输流。本课程设计的目的就是设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与IP协议的关系,使学生对TCP协议的工作原理有更深入的认识。 1.2课设计 本程序的功能是填充一个TCP数据包,并发送给目的主机。 以命令行形式运行:SendTCP sourse_ip sourse_port dest_ip dest_port 其中,SendTCP为程序名;sourse_ip为源端IP地址;sourse_port为源埠;dest_ip为目的IP地址;dest_port为目的埠。 其它的TCP头部参数请自行设定。 数据字段为“This is my homework of network,I am happy!”。 发送成功后在屏幕上输出”send OK”。 1.3相关识 编制本程序前要对TCP协议有一定的了解。当应用程序有报文需要通过TCP发送时,它就将此应用层报文传送给执行TCP协议的传输实体。TCP传输实体将用户数据加上TCP报头,形成TCP数据包,在TCP数据包上增加IP头部,形成IP包。下图显示的是TCP数据包和IP包的关系。 TCP协议的传输单元为报文段,其格式如图所示。报文段报头的长度为20B~60B。其中固定长度为20B,报文段长度最多为40B。TCP报文段主要包括以下字段。 ·埠号号号号个号长16位,分别发该TCP应进号该TCP应进号 ·序号长为32TCP协议数传报视为连续的数给个节编号序号序号报数个节顺序号 TCP头部 数据 0 15 16 31 源端口号 目的端口号 序号 确认号 报头长度 保留 URG ACK PSH RST SYN FIN 窗口大小 校验和 紧急指针 选项及填充 ·确认号该长为32个TCP个节序号 ·报头长该长为4TCP报头长4B为个单来计实际报头长20B~60B子间。因此这个字段的值在5~15之间。 ·保留:长为60。 ·控制:这个义6种不同的标个标时间以设URG为1时紧急处数ACK为1时认号PST位为1时强切断连SYN位为1时立连请这时序号为序号开始FIN为1时发经没资发 ·窗口大小:长为16对应数节为单数够传数为65535B ·紧针该长为16须紧急处数当标URG=1时紧针从TCP报头报文资开始紧针长数须紧急处数 ·选项该达40B单节选项节选项 ·校验该长达16验验围包伪头TCP报头以应层来数计IP协议头验计样伪头为12BTCP数头在计验时临时TCP数连伪头图IP地址 目的IP地址 协议号6) TCP长1.4工作环 软Microsoft Visual C++ 6.0;硬件:PC机一台。 二 课程设计分析 本课程设计的目标是发送一个TCP资料包,可以利用原始套接字来完成这个工作。整个程序由初始化原始套接字和发送TCP数据包两个部分组成。 2.1使用原始套接字 SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED); 这里,我们设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。 为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。其中flag设置为ture,并设定 IP_HDRINCL 选项,表明自己来构造IP头。注意,如果设置IP_HDRINCL 选项,那么必须具有 administrator权限,要不就必须修改注册表: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameter\ 修改键:DisableRawSecurity(类型为DWORD),把值修改为 1。如果没有,就添加。 BOOL Flag=TRUE; setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)Flag, sizeof(Flag)); int timeout=1000; setsockopt(sock, SOL_SOCKET

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档