当前位置:文档之家› 网络课程设计任务书(完整)

网络课程设计任务书(完整)

•其他的TCP头部参数自行设定。
•数据字为“This is my homework of network!”.
•成功发送后在屏幕上输出“send OK!”。
三、设计分析:
•使用原始套接字
•定义IP头部、TCP头部和伪头部的数据结构
•填充数据包
•发送数据包
四、设计思想:
本课程设计的目标是发送一个TCP数据包,可以利用原始套接字来完成这个工作。整个程序由初始化原始套接字和发送TCP数据包两个部分组成。
{
printf("setsockopt SO_SNDTIMEO error!\n");
{
WSADATA WSAData;
SOCKET sock;
IP_HEADER ipHeader;
TCP_HEADER tcpHeader;
PSD_HEADER psdHeader;
char Sendto_Buff[MAX_BUFF_LEN]; //发送缓冲区
unsigned short check_Buff[MAX_BUFF_LEN]; //检验和缓冲区
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
五、程序流程图:
六、源程序代码:
#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <time.h>
#include <windows.h>
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size )
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
具体任务
1.初始化原始套接字
2.发送TCP数据包
时间安排与完成情况
6月28号,查找好相关资料、理解原理、并分配好任务
6月29号,熟悉了解初始化原始套接字的过程
6月30号,熟悉并且了解发送数据包的过程
7月01号,把两者结合起来,实现程序的功能
7月02号,编写调试,并且撰写课程设计报告
一、设计目的:
设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与IP协议的关系,使大家对TCP协议的工作原理有更深入的认识。
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#pragma comment(lib,"ws2_32.lib")
#define IPVER 4 //IP协议预定
#define MAX_BUFF_LEN 65500 //发送缓冲区最大值
二、设计要求:
本程序的功能是填充一个TCP数据包,并发送给目的主机。
•以命令行形式运行:Send TCP source_ip source_port dest_ip dest_port。其中SendTCP为程序名;source_ip为源IP地址;source_port为源端口;dest_ip为目的IP地址;dest_port为目的端口。
为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。其中flag设置为ture,并设定IP_HDRINCL选项,表明自己来构造IP头。注意,如果设置IP_HDRINCL选项,那么必须具有administrator权限,要不就必须修改注册表:
return false;
}
if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0)
{
printf("WSAStartup Error!\n");
return false;
}
if((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,
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伪首部
创建一个原始套接字,并设置IP头选项
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标志,表示我们声明的是一个原始套接字类型。
USHORT th_urp;//16位紧急数据偏移量
}TCP_HEADER;
//CheckSum:计算校验和的子函数
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
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位标志位
SOCKET_ERROR)
{
printf("setsockopt IP_HDRINCL error!\n");
return false;
}
nTimeOver=1000;
if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR)
设计题目:发送TCP数据包
完成期限:自2010年6月28日至2010年7月02日共1周





主要内容:
1.本程序的功能是填充一个TCP数据包,并发送给目的主机。
2.以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port
其中SendTCP为程序名;source_ip为源IP地址;source_port为源端口;dest_ip为目的IP地址;dest_port为目的端口。
2.以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port
其中SendTCP为程序名;source_ip为源IP地址;source_port为源端口;dest_ip为目的IP地址;dest_port为目的端口。
3.其他的TCP头部参数自行设定。
[4]吴英.计算机网络软件编程指导书.清华大学出版社.2008
[5]徐明伟.计算机网络原理实验教程.机械工业出版社.2008
指导教师(签字):年月日
系(教研室)主任(签字):年月日
课题名称
计算机网络原理
人数
3
组长
同组人员










主要内容:
1.本程序的功能是填充一个TCP数据包,并发送给目的主机。
USHORT th_dport; //16位目的端口
ULONG th_seq;//32位序列号
ULONG th_ack;//32位确认号
UCHAR th_lenres; //4位首部长度/6位保留字
UCHAR th_flag;//6位标志位
USHORT th_win;//16位窗口大小
USHORT th_sum;//16位校验和
{
ULONG saddr; //源地址
ULONG daddr; //目的地址
UCHAR mbz;//没用
UCHAR ptcl;//协议类型
USHORT tcpl;//TCP长度
}PSD_HEADER;
typedef struct tcp_hdr //定义TCP首部
{
USHORT th_sport; //16位源端口
WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)
{
printf("Socket Setup Error!\n");
return false;
}
flag=true;
if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameter\
相关主题