网络课程设计报告任务书

上传人:mg****2 文档编号:301783301 上传时间:2022-05-31 格式:DOC 页数:13 大小:283KB
返回 下载 相关 举报
网络课程设计报告任务书_第1页
第1页 / 共13页
网络课程设计报告任务书_第2页
第2页 / 共13页
网络课程设计报告任务书_第3页
第3页 / 共13页
网络课程设计报告任务书_第4页
第4页 / 共13页
网络课程设计报告任务书_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《网络课程设计报告任务书》由会员分享,可在线阅读,更多相关《网络课程设计报告任务书(13页珍藏版)》请在金锄头文库上搜索。

1、-计算机网络原理课程设计说明书发送TCP数据包起止日期: 2010年06月28日 至 2010年07月02日学生*班级*成绩指导教师(签字)计算机与通信学院2010年 7 月02 日*工业大学课程设计任务书2009 2010 学年第 二 学期计算机与通信学院系、部通信工程专业 071班级课程名称:计算机网络原理设计题目:发送TCP数据包完成期限:自2010年6月28日至2010年7月02日共1周内容及任务主要内容:1.本程序的功能是填充一个TCP数据包,并发送给目的主机。2.以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port 其中S

2、endTCP为程序名;source_ip为源IP地址; source_port为源端口; dest_ip为目的IP地址; dest_port为目的端口。3.其他的TCP头部参数自行设定。4.数据字段为“This is my homework of network!.5.成功发送后在屏幕上输出“send OK。进度安排起止日期工作内容分组、任务分配、课题理解查阅资料、算法分析设计、完成流程图的设计了解初始化原始套接字了解并且熟悉发送TCP数据包的过程程序调试、演示和辩论、修改设计说明书、个人总结主要参考资料1 谢希仁.计算机网络(第五版).电子工业.20082 吴功宜.计算机网络 (第二版).清

3、华大学.20083 吴功宜.计算机网络课程设计.机械工业.2005校图书馆:TP393.4664 吴英.计算机网络软件编程指导书.清华大学.20085 *明伟.计算机网络原理实验教程.机械工业.2008指导教师签字:年 月 日系教研室主任签字:年 月 日课题名称计算机网络原理人 数3组 长同组人员课题的主要内容和要求主要内容:1.本程序的功能是填充一个TCP数据包,并发送给目的主机。2.以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port 其中SendTCP为程序名;source_ip为源IP地址; source_port为源端口;

4、dest_ip为目的IP地址; dest_port为目的端口。3.其他的TCP头部参数自行设定。4.数据字段为“This is my homework of network!.5.成功发送后在屏幕上输出“send OK。主要要求:1算法正确,程序运行正常、输出清晰。2遵循良好的编程规*,程序要有适宜的注释。3编程所使用的操作系统、语言、开发环境不限,但要在设计说明书中注明。4设计说明书逻辑清晰,主要算法用流程图表述,书写规*。具体任务1.初始化原始套接字2.发送TCP数据包时间安排与完成情况6月28号,查找好相关资料、理解原理、并分配好任务6月29号,熟悉了解初始化原始套接字的过程6月30号,

5、熟悉并且了解发送数据包的过程7月01号, 把两者结合起来,实现程序的功能7月02号,编写调试,并且撰写课程设计报告一、设计目的:设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的构造以及TCP协议与IP协议的关系,使大家对TCP协议的工作原理有更深入的认识。二、设计要求: 本程序的功能是填充一个TCP数据包,并发送给目的主机。 以命令行形式运行:Send TCP source_ip source_port dest_ip dest_port 。其中SendTCP为程序名;source_ip为源IP地址; source_port为源端口; dest_ip为目的IP地址; dest_p

6、ort为目的端口。 其他的TCP头部参数自行设定。 数据字段为“This is my homework of network!. 成功发送后在屏幕上输出“send OK!。三、设计分析: 使用原始套接字 定义IP头部、TCP头部和伪头部的数据构造 填充数据包 发送数据包四、设计思想:本课程设计的目标是发送一个TCP数据包,可以利用原始套接字来完成这个工作。整个程序由初始化原始套接字和发送TCP数据包两个局部组成。创立一个原始套接字,并设置IP头选项SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASocck

7、et(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_MACHINESy

8、stemCurrentControlSetServicesAfdParameter 修改键:DisableRawSecurity类型为DWORD,把值修改为 1。如果没有,就添加。 BOOL 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_SNDTIM

9、EO表示使用发送超时设置,超时时间设置为1000ms。构造IP头和TCP头这里, IP头和TCP头以及TCP伪部的构造请参考下面它们的数据构造。计算校验和的子函数在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部加上伪头部,其实现代码如下: USHORT checksum(USHORT *buffer, int size) unsigned long cksum=0; while(size 1) cksum+=*buffer+; size -=sizeof(USHORT); if(size ) cksum += *(UCHAR*)buffer;

10、cksum = (cksum 16) + (cksum & 0*ffff); cksum += (cksum 16); return (USHORT)(cksum); 五、程序流程图:六、源程序代码:*include *include *include *include *include *include *include *include *pragma ment(lib,ws2_32.lib)*define IPVER 4 /IP协议预定*define MA*_BUFF_LEN 65500 /发送缓冲区最大值typedef struct ip_hdr /定义IP首部 UCHAR h_ver

11、len; /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 sourceIP; /32位源IP地址 ULONG destIP; /32位目的IP地址 IP_HEADER; typedef struct tsd_hdr /定义TCP伪

12、首部 ULONG saddr; /源地址ULONG daddr; /目的地址 UCHAR mbz; /没用UCHAR ptcl; /协议类型 USHORT tcpl; /TCP长度 PSD_HEADER; typedef struct tcp_hdr /定义TCP首部 USHORT th_sport; /16位源端口 USHORT th_dport; /16位目的端口 ULONG th_seq; /32位序列号 ULONG th_ack; /32位确认号 UCHAR th_lenres; /4位首部长度/6位保存字 UCHAR th_flag; /6位标志位 USHORT th_win; /1

13、6位窗口大小 USHORT th_sum; /16位校验和 USHORT th_urp; /16位紧急数据偏移量 TCP_HEADER; /CheckSum:计算校验和的子函数 USHORT checksum(USHORT *buffer, int size) unsigned long cksum=0; while(size 1) cksum+=*buffer+; size -=sizeof(USHORT); if(size) cksum += *(UCHAR*)buffer; cksum = (cksum 16) + (cksum & 0*ffff); cksum += (cksum 16); return (USHORT)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号